Aracılığıyla paylaş


CMemFile Sınıfı

Bellek dosyalarını destekleyen CFile türetilmiş sınıfı.

Sözdizimi

class CMemFile : public CFile

Üyeler

Ortak Oluşturucular

Ad Tanım
CMemFile::CMemFile Bir bellek dosyası nesnesi oluşturur.

Genel Yöntemler

Ad Tanım
CMemFile::Attach öğesine bir bellek CMemFilebloğu ekler.
CMemFile::D etach Bellek bloğunu'ndan CMemFile ayırır ve ayrılan bellek bloğuna bir işaretçi döndürür.
CMemFile::GetBufferPtr Bellek dosyasını destekleyen bellek arabelleğine alma veya yazma.

Korumalı Yöntemler

Ad Tanım
CMemFile::Alloc Bellek ayırma davranışını değiştirmek için geçersiz kılın.
CMemFile::Free Bellek ayırma davranışını değiştirmek için geçersiz kılın.
CMemFile::GrowFile Dosyayı büyütürken davranışı değiştirmek için geçersiz kılın.
CMemFile::Memcpy Dosyaları okurken ve yazarken bellek kopyalama davranışını değiştirmek için geçersiz kılın.
CMemFile::Realloc Bellek yeniden konumlandırma davranışını değiştirmek için geçersiz kılın.

Açıklamalar

Bu bellek dosyaları, dosyanın disk yerine RAM'de depolanması dışında disk dosyaları gibi davranır. Bellek dosyası şunlar için kullanışlıdır:

  • hızlı geçici depolama
  • bağımsız işlemler arasında ham bayt aktarma
  • serileştirilmiş nesneleri bağımsız işlemler arasında aktarma

CMemFile nesneleri kendi belleklerini otomatik olarak ayırabilir. Alternatif olarak, Ekle'yi çağırarak nesneye CMemFile kendi bellek bloğunuzu ekleyebilirsiniz. Her iki durumda da, bellek dosyasının otomatik olarak büyütüldüğünü belirten bellek, sıfır değilse nGrowBytes boyutlu artışlarla ayrılırnGrowBytes.

Bellek başlangıçta nesne tarafından CMemFile ayrılmışsa, nesne yok CMemFile edildikten sonra bellek bloğu otomatik olarak silinir; aksi takdirde, nesneye eklediğiniz belleği serbest bırakma sorumluluğunuz olur.

Ayır'ı çağırarak nesneden ayırdığınızda sağlanan işaretçi aracılığıyla bellek bloğuna CMemFile erişebilirsiniz.

en yaygın kullanımıCMemFile, bir CMemFile nesne oluşturmak ve CFile üye işlevlerini çağırarak kullanmaktır. CMemFile Oluşturma işlemi otomatik olarak açar: Yalnızca disk dosyaları için kullanılan CFile::Open çağrısını yapamazsınız. Disk CMemFile dosyası kullanmadığından veri üyesi CFile::m_hFile kullanılmaz.

CFile Yinelenen, LockRange ve UnlockRange üye işlevleri için CMemFileuygulanmaz. Bir nesnede CMemFile bu işlevleri çağırırsanız CNotSupportedException alırsınız.

CMemFile, bellek ayırmak, yeniden dağıtmak ve serbest bırakmak için malloc, realloc ve free çalışma zamanı kitaplığı işlevlerini ve okuma ve yazma sırasında kopyalama belleğini engellemek için iç memcpy'yi kullanır. Bu davranışı veya dosyayı büyüttüğünde CMemFile davranışı değiştirmek isterseniz, kendi sınıfınızı CMemFile türetin ve uygun işlevleri geçersiz kılın.

hakkında CMemFiledaha fazla bilgi için MFC'deki dosyalar ve Bellek Yönetimi (MFC) makalelerine bakın ve Çalışma Zamanı Kitaplığı Başvurusu'nda Dosya İşleme bölümüne bakın.

Devralma Hiyerarşisi

Cobject

Cfile

CMemFile

Gereksinimler

Üst bilgi: afx.h

CMemFile::Alloc

Bu işlev üye işlevleri tarafından CMemFile çağrılır.

virtual BYTE* Alloc(SIZE_T nBytes);

Parametreler

nBayt
Ayrılacak bellek bayt sayısı.

İade Değeri

Ayrılan bellek bloğunun işaretçisi veya ayırma başarısız olursa NULL.

Açıklamalar

Özel bellek ayırmayı uygulamak için bu işlevi geçersiz kılın. Bu işlevi geçersiz kılarsanız, büyük olasılıkla Free ve Realloc'un da geçersiz kılınmasını istersiniz.

Varsayılan uygulama, bellek ayırmak için çalışma zamanı kitaplığı işlevi malloc'u kullanır.

CMemFile::Attach

öğesine bir bellek bloğu eklemek için CMemFilebu işlevi çağırın.

void Attach(
    BYTE* lpBuffer,
    UINT nBufferSize,
    UINT nGrowBytes = 0);

Parametreler

lpBuffer
öğesine eklenecek arabelleğe ilişkin CMemFileişaretçi.

nBufferSize
Arabellek boyutunu bayt cinsinden belirten bir tamsayı.

nGrowBytes
Bellek ayırma bayt cinsinden artar.

Açıklamalar

Bu, bellek dosyası olarak bellek bloğunun kullanılmasına neden olur CMemFile .

nGrowBytes 0 ise, CMemFile dosya uzunluğunu nBufferSize olarak ayarlar. Bu, bellek bloğundaki verilerin eklenmeden CMemFile önce dosya olarak kullanılacağı anlamına gelir. Bu şekilde oluşturulan bellek dosyaları büyütülemiyor.

Dosya büyütülemediğinden, dosyayı büyütmeye çalışmamaya dikkat edin CMemFile . Örneğin, sonuna kadar yazmak için CFile:Write geçersiz kılmalarını çağırmayın CMemFile veya nBufferSize değerinden uzun bir uzunlukla CFile:SetLength çağrısı yapmayın.

nGrowBytes değeri 0'dan büyükse, CMemFile eklediğiniz bellek bloğunun içeriğini yoksayar. geçersiz kılmayı CFile::Writekullanarak CMemFile bellek dosyasının içeriğini sıfırdan yazmanız gerekir. dosyanın sonunu yazmayı denerseniz veya geçersiz kılmayı CFile::SetLengthCMemFile çağırarak CMemFile dosyayı büyütürseniz, bellek ayırması nGrowBytes artırımlarıyla artar. Geçirdiğiniz Attach bellek bloğu Alloc ile uyumlu bir yöntemle ayrılmadıysa bellek ayırmayı büyütme işlemi başarısız olur. varsayılan uygulamasıyla Allocuyumlu olmak için, belleği çalışma zamanı kitaplığı işlevi malloc veya calloc ile ayırmanız gerekir.

CMemFile::CMemFile

İlk aşırı yükleme boş bir bellek dosyası açar.

CMemFile(UINT nGrowBytes = 1024);

CMemFile(
    BYTE* lpBuffer,
    UINT nBufferSize,
    UINT nGrowBytes = 0);

Parametreler

nGrowBytes
Bellek ayırma bayt cinsinden artar.

lpBuffer nBufferSize boyutunun bilgilerini alan bir arabelleğe işaretçi.

nBufferSize
Dosya arabelleğinin boyutunu bayt cinsinden belirten bir tamsayı.

Açıklamalar

Dosya oluşturucu tarafından açılır. CFile::Open çağrısı yapmayın.

İkinci aşırı yükleme, ilk oluşturucuyu kullandıysanız ve hemen aynı parametrelerle Ekle olarak adlandırılırsa aynı şekilde davranır. Ayrıntılar için bkz Attach .

Örnek

CMemFile f; // Ready to use - no Open necessary.

BYTE * pBuf = (BYTE *)new char [1024];
CMemFile g(pBuf, 1024, 256);
// same as CMemFile g; g.Attach(pBuf, 1024, 256);

CMemFile::D etach

tarafından CMemFilekullanılan bellek bloğuna bir işaretçi almak için bu işlevi çağırın.

BYTE* Detach();

İade Değeri

Bellek dosyasının içeriğini içeren bellek bloğu işaretçisi.

Açıklamalar

Bu işlevi çağırmak da kapatır CMemFile. Ekle'yi çağırarak bellek bloğunu 'a CMemFile yeniden ekleyebilirsiniz. Dosyayı yeniden eklemek ve içindeki verileri kullanmak istiyorsanız, çağırmadan önce Detachdosyanın uzunluğunu almak için CFile::GetLength çağrısı yapmalısınız. Verilerini ( nGrowBytes == 0) kullanabilmek için CMemFile bir bellek bloğu eklerseniz, bellek dosyasını büyütemezsiniz.

CMemFile::Free

Bu işlev üye işlevleri tarafından CMemFile çağrılır.

virtual void Free(BYTE* lpMem);

Parametreler

lpMem
Serbest bırakılacak belleğin işaretçisi.

Açıklamalar

Özel bellek ayırmayı uygulamak için bu işlevi geçersiz kılın. Bu işlevi geçersiz kılarsanız, muhtemelen Alloc ve Realloc'un da geçersiz kılınmasını istersiniz.

CMemFile::GetBufferPtr

Bellek dosyasını destekleyen bellek arabelleğine alma veya yazma.

virtual UINT GetBufferPtr(
    UINT nCommand,
    UINT nCount = 0,
    void** ppBufStart = NULL,
    void** ppBufMax = NULL
);

Parametreler

nKomand
Yürütülecek bufferCommand (bufferCheck, bufferCommit, bufferReadveya bufferWrite ).

nCount
nCommand'a bağlı olarak, arabellekteki okuma, yazma veya işleme bayt sayısı. Arabellekten okurken, geçerli konumdan dosyanın sonuna bir arabellek döndürmek için -1 belirtin.

ppBufStart
[out] Arabelleğin başlangıcı. nCommand olduğunda bufferCommitolmalıdırNULL.

ppBufMax
[out] Arabelleğin sonu. nCommand olduğunda bufferCommitolmalıdırNULL.

İade Değeri

komut değeri Dönüş değeri
buffercheck Doğrudan arabelleğe alma destekleniyorsa bufferDirect değerini döndürür, aksi takdirde 0 döndürür.
bufferCommit Döndürür 0
bufferRead veya bufferWrite Döndürülen arabellek alanında bayt sayısını döndürür. ppBufStart ve ppBufMax , okuma/yazılı arabelleğin başlangıcını ve sonunu gösterir.

Açıklamalar

Bellek arabelleğindeki (m_nPosition) geçerli konum, nCommand'a bağlı olarak aşağıdaki yollarla gelişmiştir:

nKomand arabellek konumu
bufferCommit Geçerli konum, işlenen arabelleğin boyutuna göre ilerler.
bufferRead Geçerli konum, okuma arabelleğinin boyutuna göre ilerler.

CMemFile::GrowFile

Bu işlev, üye işlevlerin birkaçı tarafından çağrılır CMemFile .

virtual void GrowFile(SIZE_T dwNewLen);

Parametreler

dwNewLen
Bellek dosyasının yeni boyutu.

Açıklamalar

Dosyasının büyüme biçimini CMemFile değiştirmek istiyorsanız, dosyayı geçersiz kılabilirsiniz. Varsayılan uygulama, var olan bir bloğu büyütmek (veya bellek bloğu oluşturmak için Ayırma) için Realloc'u çağırır ve oluşturucuda belirtilen değerin nGrowBytes katlarına bellek ayırır veya Çağrı ekle'yi kullanır.

CMemFile::Memcpy

Bu işlev, bellek dosyasına ve bellek dosyasından CMemFile veri aktarmak için CFile::Read ve CFile::Write geçersiz kılmaları tarafından çağrılır.

virtual BYTE* Memcpy(
    BYTE* lpMemTarget,
    const BYTE* lpMemSource,
    SIZE_T nBytes);

Parametreler

lpMemTarget
Kaynak belleğin kopyalanacağı bellek bloğunun işaretçisi.

lpMemSource
Kaynak bellek bloğu işaretçisi.

nBayt
Kopyalanacak bayt sayısı.

İade Değeri

lpMemTarget kopyası.

Açıklamalar

Bu bellek kopyalarını nasıl gerçekleştireceğini CMemFile değiştirmek istiyorsanız bu işlevi geçersiz kılın.

CMemFile::Realloc

Bu işlev üye işlevleri tarafından CMemFile çağrılır.

virtual BYTE* Realloc(
    BYTE* lpMem,
    SIZE_T nBytes);

Parametreler

lpMem
Yeniden taşınacak bellek bloğuna bir işaretçi.

nBayt
Bellek bloğu için yeni boyut.

İade Değeri

Yeniden ayrılan (ve büyük olasılıkla taşınan) bellek bloğunun işaretçisi veya yeniden ayırma başarısız olursa NULL.

Açıklamalar

Özel bellek yeniden ayırma uygulamak için bu işlevi geçersiz kılın. Bu işlevi geçersiz kılarsanız, muhtemelen Alloc ve Free'yi de geçersiz kılmak istersiniz.

Ayrıca bkz.

CFile Sınıfı
Hiyerarşi Grafiği