Megosztás:


CMemFile osztály

A memóriafájlokat támogató CFile-származtatott osztály.

Szemantika

class CMemFile : public CFile

Tagok

Nyilvános konstruktorok

Név Leírás
CMemFile::CMemFile Memóriafájl-objektumot hoz létre.

Nyilvános metódusok

Név Leírás
CMemFile::Attach Memóriablokkot csatol a parancshoz CMemFile.
CMemFile::D etach Leválasztja a memóriablokkot, CMemFile és visszaad egy mutatót a leválasztott memóriablokkra.
CMemFile::GetBufferPtr Lekérés vagy írás a memóriafájlt háttérként tartalmazó memóriapufferbe.

Védett metódusok

Név Leírás
CMemFile::Alloc Felülbírálás a memóriafoglalási viselkedés módosításához.
CMemFile::Free Felülbírálás a memória felszabadítási viselkedésének módosításához.
CMemFile::GrowFile Felülbírálás a fájl növekvő viselkedésének módosításához.
CMemFile::Memcpy Felülbírálás a memória másolási viselkedésének módosításához fájlok olvasása és írása során.
CMemFile::Realloc Felülbírálás a memória újraelosztási viselkedésének módosításához.

Megjegyzések

Ezek a memóriafájlok úgy viselkednek, mint a lemezfájlok, kivéve, hogy a fájl ram-ban van tárolva, nem pedig lemezen. A memóriafájl a következő esetekben hasznos:

  • gyors ideiglenes tárolás
  • nyers bájtok átvitele független folyamatok között
  • szerializált objektumok átvitele független folyamatok között

CMemFile az objektumok automatikusan lefoglalhatják saját memóriájukat. Vagy csatolhatja saját memóriablokkját az objektumhoz az CMemFileCsatolás meghívásával. A memóriafájl automatikus növeléséhez szükséges memória mindkét esetben -méretű növekményekben van lefoglalva nGrowBytes, ha nGrowBytes nem nulla.

A memóriablokk automatikusan törlődik az CMemFile objektum megsemmisítésekor, ha a memóriát eredetileg az CMemFile objektum foglalta le; ellenkező esetben Ön felelős az objektumhoz csatolt memória felszabadításáért.

A memóriablokkot a Leválasztás CMemFile érheti el az objektumról való leválasztásakor megadott mutatón keresztül.

A leggyakoribb használat CMemFile egy CMemFile objektum létrehozása és használata CFile tagfüggvények meghívásával. CMemFile Automatikusan megnyitja azt: nem hívja meg a CFile::Open fájlt, amelyet csak lemezfájlokhoz használ. Mivel CMemFile nem használ lemezfájlt, a rendszer nem használja az adattagot CFile::m_hFile .

A CFileDuplikált, a LockRange és az UnlockRange tagfüggvények nincsenek implementálva a következőhöz CMemFile: . Ha ezeket a függvényeket egy CMemFile objektumon hívja meg, egy CNotSupportedExceptiont kap.

CMemFile a futásidejű könyvtárfüggvényeket használja: malloc, realloc és free to allocate, reallocate, and deallocate memory; és a belső memcpy , amely letiltja a másolási memóriát olvasáskor és íráskor. Ha módosítani szeretné ezt a viselkedést vagy a viselkedést egy fájl létrehozásakor CMemFile , saját osztályt CMemFile kell létrehoznia, és felül kell bírálnia a megfelelő függvényeket.

További információ: CMemFileFájlok az MFC-ben és a memóriakezelésben (MFC) és a fájlkezelés a Run-Time könyvtár referenciájában.

Öröklési hierarchia

CObject

CFile

CMemFile

Követelmények

Fejléc: afx.h

CMemFile::Alloc

Ezt a függvényt tagfüggvények CMemFile hívják.

virtual BYTE* Alloc(SIZE_T nBytes);

Paraméterek

nBytes
Lefoglalandó memória bájtjainak száma.

Visszaadott érték

A lefoglalt memóriablokkra mutató mutató, vagy null értékű, ha a foglalás sikertelen volt.

Megjegyzések

A függvény felülbírálása egyéni memóriafoglalás implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg felül kell bírálnia az Ingyenes és a Realloc függvényt is.

Az alapértelmezett implementáció a futásidejű könyvtárfüggvény malloc használatával foglalja le a memóriát.

CMemFile::Attach

Hívja meg ezt a függvényt, hogy memóriablokkot csatoljon a függvényhez CMemFile.

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

Paraméterek

lpBuffer
Mutasson arra a pufferre, amelyhez CMemFilehozzá szeretne csatolni.

nBufferSize
Egy egész szám, amely a puffer méretét adja meg bájtban.

nGrowBytes
A memóriafoglalás növekedése bájtban.

Megjegyzések

Ez a memóriablokk memóriafájlként való használatát okozza CMemFile .

Ha az nGrowBytes értéke 0, CMemFile a fájl hosszát nBufferSize értékre állítja. Ez azt jelenti, hogy a memóriablokkban lévő, a csatolás CMemFile előtt lévő adatok lesznek a fájlként használva. Az ilyen módon létrehozott memóriafájlok nem termeszthetők.

Mivel a fájl nem termeszthető, ügyeljen arra, hogy ne kísérelje CMemFile meg növelni a fájlt. Ne hívja meg például a CMemFileCFile::Write felülbírálásait, ha a végén ír, vagy nem hívja meg a CFile::SetLength függvényt az nBufferSize-nél hosszabb hosszúságúra.

Ha az nGrowBytes értéke 0-nál nagyobb, CMemFile figyelmen kívül hagyja a csatolt memóriablokk tartalmát. A memóriafájl tartalmát az alapoktól kell megírnia a CMemFile felülbírálással CFile::Write. Ha a fájl végére próbál írni, vagy a fájl felülbírálásának CMemFilemeghívásával megkísérli növelni a CFile::SetLength fájlt, CMemFile a memóriafoglalás nGrowBytes-lépésekben növekszik. A memóriafoglalás növekedése sikertelen lesz, ha az átadott Attach memóriablokk nem az Alloc-tal kompatibilis metódussal lett lefoglalva. Ahhoz, hogy kompatibilis legyen az alapértelmezett implementációval Alloc, le kell foglalnia a memóriát a malloc vagy a calloc futásidejű kódtárfüggvényével.

CMemFile::CMemFile

Az első túlterhelés üres memóriafájlt nyit meg.

CMemFile(UINT nGrowBytes = 1024);

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

Paraméterek

nGrowBytes
A memóriafoglalás növekedése bájtban.

lpBuffer
Mutasson egy olyan pufferre, amely az nBufferSize méretre vonatkozó információkat fogad.

nBufferSize
A fájlpuffer méretét bájtban megadó egész szám.

Megjegyzések

A fájlt a konstruktor nyitja meg. Ne hívja meg a CFile::Open fájlt.

A második túlterhelés ugyanúgy működik, mintha az első konstruktort használták volna, és azonnal összecsatolásnak nevezték volna ugyanazokkal a paraméterekkel. Részletekért lásd a Attach.

példa

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

Hívja meg ezt a függvényt, hogy egy mutatót kapjon a használt memóriablokkhoz CMemFile.

BYTE* Detach();

Visszaadott érték

A memóriafájl tartalmát tartalmazó memóriablokkra mutató mutató.

Megjegyzések

A függvény meghívása szintén bezárja a CMemFile. A memóriablokkot CMemFile újracsatlakoztathatja az Attach meghívásával. Ha újra szeretné használni a fájlt, és az benne lévő adatokat szeretné használni, hívja meg a CFile::GetLength parancsot a fájl hosszának lekéréséhez a hívás Detachelőtt. Ha egy memóriablokkot CMemFile csatol ahhoz, hogy az adatokat (nGrowBytes == 0) használhassa, akkor nem tudja növelni a memóriafájlt.

CMemFile::Free

Ezt a függvényt tagfüggvények CMemFile hívják.

virtual void Free(BYTE* lpMem);

Paraméterek

lpMem
Mutasson a felszabadítani kívánt memóriára.

Megjegyzések

A függvény felülbírálása egyéni memóriaelosztó implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg az Alloc és a Realloc függvényt is felül kell bírálnia.

CMemFile::GetBufferPtr

Lekérés vagy írás a memóriafájlt háttérként tartalmazó memóriapufferbe.

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

Paraméterek

nCommand
A pufferCommand végrehajtása (bufferCheck, bufferCommit, , bufferReadvagy bufferWrite).

nCount
Az nCommand függvénytől függően a pufferben az olvasáshoz, íráshoz vagy véglegesítéshez tartozó bájtok száma. Amikor a pufferből olvas, adja meg a -1, hogy a puffer az aktuális pozícióból a fájl végéhez legyen visszajuttatva.

ppBufStart
[kifelé] A puffer kezdete. Akkor kell lennieNULL, ha az nCommand .bufferCommit

ppBufMax
[kifelé] A puffer vége. Akkor kell lennieNULL, ha az nCommand .bufferCommit

Visszaadott érték

parancsérték Visszaadott érték
buffercheck A bufferDirect értéket adja vissza, ha a közvetlen pufferelés támogatott, egyébként 0.
bufferCommit Visszatér 0
bufferRead vagy bufferWrite A visszaadott pufferterület bájtjainak számát adja vissza. a ppBufStart és a ppBufMax az olvasási/írási puffer elejére és végére mutat.

Megjegyzések

A memóriapuffer (m_nPosition) aktuális pozíciója az nCommandtól függően a következő módokon halad:

nCommand pufferpozíció
bufferCommit Az aktuális pozíció a véglegesített puffer méretével halad előre.
bufferRead Az aktuális pozíció az olvasási puffer méretével halad előre.

CMemFile::GrowFile

Ezt a függvényt több tagfüggvény is meghívja CMemFile .

virtual void GrowFile(SIZE_T dwNewLen);

Paraméterek

dwNewLen
A memóriafájl új mérete.

Megjegyzések

Felülbírálhatja, ha módosítani szeretné a fájl növekedésének módját CMemFile . Az alapértelmezett implementáció meghívja a Reallocot egy meglévő blokk (vagy memóriablokk létrehozásához az Alloc ) bővítésére, amely a memóriát a konstruktorban vagy a nGrowBytes hívás csatolásában megadott érték többszörösében helyezi el.

CMemFile::Memcpy

Ezt a függvényt a CMemFileCFile::Olvasás és CFile::Írás parancs felülbírálása hívja meg, hogy adatokat továbbítson a memóriafájlba és onnan.

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

Paraméterek

lpMemTarget
Mutasson arra a memóriablokkra, amelybe a forrásmemória lesz másolva.

lpMemSource
Mutasson a forrásmemóriablokkra.

nBytes
A másolandó bájtok száma.

Visszaadott érték

Az lpMemTarget másolata.

Megjegyzések

Bírálja felül ezt a függvényt, ha módosítani szeretné a memóriamásolatok módját CMemFile .

CMemFile::Realloc

Ezt a függvényt tagfüggvények CMemFile hívják.

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

Paraméterek

lpMem
Az újratelepítendő memóriablokkra mutató mutató.

nBytes
A memóriablokk új mérete.

Visszaadott érték

Az újratelepített (és esetleg áthelyezett) memóriablokkra mutató mutató, vagy null értékű, ha az újratelepítés sikertelen volt.

Megjegyzések

Felülbírálja ezt a függvényt az egyéni memóriaáthelyezés implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg az Alloc és a Free függvényt is felül kell bírálnia.

Lásd még

CFile Osztály
hierarchiadiagram