Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bellek dosyalarını destekleyen CFile türetilmiş sınıfı.
Sözdizimi
class CMemFile : public CFile
Üyeler
Ortak Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
| CMemFile::CMemFile | Bir bellek dosyası nesnesi oluşturur. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
| 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
| Veri Akışı Adı | Açıklama |
|---|---|
| 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 CMemFilenesneden ayırdığınızda sağlanan işaretçi aracılığıyla bellek bloğuna 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
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ı.
Dönüş 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 CMemFile geçersiz kılmalarını çağırmayın 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ı CMemFilekullanarak CFile::Write bellek dosyasının içeriğini sıfırdan yazmanız gerekir. dosyanın sonunu yazmayı denerseniz veya geçersiz kılmayı CMemFileCFile::SetLength ç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 yönelik 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();
Dönüş 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'yiCMemFilebellek bloğunu 'a yeniden ekleyebilirsiniz. Dosyayı yeniden eklemek ve içindeki verileri kullanmak istiyorsanız, çağırmadan çağrısı yapmalısınız. Verilerini (CMemFile == 0) kullanabilmek için nGrowBytes 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ı. nCommandNULLolmalıdırbufferCommit.
ppBufMax
[out] Arabelleğin sonu. nCommand olduğunda NULLolmalıdırbufferCommit.
Dönüş 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ı.
Dönüş 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.
Dönüş 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.