Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De CFile-afgeleide klasse die geheugenbestanden ondersteunt.
Syntaxis
class CMemFile : public CFile
Leden
Openbare constructors
| Naam | Beschrijving |
|---|---|
| CMemFile::CMemFile | Maakt een geheugenbestandsobject. |
Openbare methoden
| Naam | Beschrijving |
|---|---|
| CMemFile::Attach | Voegt een geheugenblok toe aan CMemFile. |
| CMemFile::D etach | Loskoppelt het geheugenblok van CMemFile en retourneert een aanwijzer naar het blok geheugen losgekoppeld. |
| CMemFile::GetBufferPtr | Haal of schrijf naar de geheugenbuffer die een geheugenbestand back-ups maakt. |
Beveiligde methoden
| Naam | Beschrijving |
|---|---|
| CMemFile::Alloc | Overschrijven om het gedrag van geheugentoewijzing te wijzigen. |
| CMemFile::Free | Overschrijven om het gedrag van de geheugen-deallocatie te wijzigen. |
| CMemFile::GrowFile | Overschrijven om gedrag te wijzigen bij het kweken van een bestand. |
| CMemFile::Memcpy | Overschrijven om het gedrag van geheugenkopie te wijzigen bij het lezen en schrijven van bestanden. |
| CMemFile::Realloc | Overschrijven om het gedrag van de herlocatie van geheugen te wijzigen. |
Opmerkingen
Deze geheugenbestanden gedragen zich als schijfbestanden, behalve dat het bestand wordt opgeslagen in ram-geheugen in plaats van op schijf. Een geheugenbestand is handig voor:
- snelle tijdelijke opslag
- onbewerkte bytes overdragen tussen onafhankelijke processen
- geserialiseerde objecten overdragen tussen onafhankelijke processen
CMemFile objecten kunnen automatisch hun eigen geheugen toewijzen. U kunt ook uw eigen geheugenblok aan het CMemFile object koppelen door Attach aan te roepen. In beide gevallen wordt geheugen voor het automatisch uitbreiden van het geheugenbestand toegewezen in nGrowBytesincrementele grootte als nGrowBytes dit niet nul is.
Het geheugenblok wordt automatisch verwijderd na vernietiging van het CMemFile object als het geheugen oorspronkelijk door het CMemFile object is toegewezen. Anders bent u verantwoordelijk voor het toewijzen van het geheugen dat u aan het object hebt gekoppeld.
U kunt het geheugenblok openen via de aanwijzer die is opgegeven wanneer u het loskoppelt van het CMemFile object door loskoppelen aan te roepen.
Het meest voorkomende gebruik is CMemFile om een CMemFile object te maken en te gebruiken door CFile-lidfuncties aan te roepen. Als u een CMemFile bestand maakt, wordt deze automatisch geopend: U roept CFile::Open niet aan, dat alleen wordt gebruikt voor schijfbestanden. Omdat CMemFile er geen schijfbestand wordt gebruikt, wordt het gegevenslid CFile::m_hFile niet gebruikt.
De CFile lidfuncties Duplicate, LockRange en UnlockRange zijn niet geïmplementeerd voor CMemFile. Als u deze functies aanroept voor een CMemFile object, krijgt u een CNotSupportedException.
CMemFile maakt gebruik van de runtimebibliotheekfuncties malloc, realloc en gratis om geheugen toe te wijzen, opnieuw toe te wijzen en de toewijzing ervan ongedaan te maken; en de intrinsieke memcpy om kopieergeheugen te blokkeren bij het lezen en schrijven. Als u dit gedrag of het gedrag wilt wijzigen wanneer CMemFile u een bestand groeit, moet u uw eigen klasse afleiden van CMemFile de juiste functies en deze overschrijven.
Zie de artikelen CMemFile en Geheugenbeheer (MFC) voor meer informatie en zie Bestandsafhandeling in de naslaginformatie overRun-Time bibliotheek.
Overnamehiërarchie
CMemFile
Behoeften
koptekst: afx.h
CMemFile::Alloc
Deze functie wordt aangeroepen door CMemFile lidfuncties.
virtual BYTE* Alloc(SIZE_T nBytes);
Parameterwaarden
nBytes
Het aantal bytes aan geheugen dat moet worden toegewezen.
Retourwaarde
Een aanwijzer naar het geheugenblok dat is toegewezen of NULL als de toewijzing is mislukt.
Opmerkingen
Overschrijf deze functie om aangepaste geheugentoewijzing te implementeren. Als u deze functie overschrijft, wilt u waarschijnlijk ook Free en Realloc overschrijven.
De standaard implementatie maakt gebruik van de runtimebibliotheekfunctie malloc om geheugen toe te wijzen.
CMemFile::Attach
Roep deze functie aan om een geheugenblok aan te CMemFilekoppelen.
void Attach(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Parameterwaarden
lpBuffer
Aanwijzer naar de buffer waaraan moet worden gekoppeld CMemFile.
nBufferSize
Een geheel getal dat de grootte van de buffer in bytes aangeeft.
nGrowBytes
De toename van de geheugentoewijzing in bytes.
Opmerkingen
Dit zorgt ervoor dat CMemFile het geheugenblok wordt gebruikt als het geheugenbestand.
Als nGrowBytes 0 is, CMemFile wordt de bestandsgrootte ingesteld op nBufferSize. Dit betekent dat de gegevens in het geheugenblok voordat deze aan het bestand zijn gekoppeld CMemFile , worden gebruikt als het bestand. Geheugenbestanden die op deze manier zijn gemaakt, kunnen niet worden uitgebreid.
Omdat het bestand niet kan worden uitgebreid, moet u ervoor zorgen dat CMemFile u het bestand niet probeert te vergroten. Roep bijvoorbeeld de onderdrukkingen van CMemFile niet aan om achter het einde te schrijven of roep CFile::SetLength niet aan met een lengte die langer is dan nBufferSize.
Als nGrowBytes groter is dan 0, CMemFile negeert u de inhoud van het geheugenblok dat u hebt gekoppeld. U moet de inhoud van het volledig nieuwe geheugenbestand schrijven met behulp van de CMemFile onderdrukking van CFile::Write. Als u probeert het einde van het bestand te schrijven of het bestand te vergroten door de CMemFile onderdrukking aan CFile::SetLengthte roepen, CMemFile wordt de geheugentoewijzing in stappen van nGrowBytes groter. Het uitbreiden van de geheugentoewijzing mislukt als het geheugenblok dat u doorgeeft Attach , niet is toegewezen met een methode die compatibel is met Alloc. Als u compatibel wilt zijn met de standaard implementatie van Alloc, moet u het geheugen toewijzen met de runtimebibliotheekfunctie malloc of calloc.
CMemFile::CMemFile
Met de eerste overbelasting wordt een leeg geheugenbestand geopend.
CMemFile(UINT nGrowBytes = 1024);
CMemFile(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Parameterwaarden
nGrowBytes
De toename van de geheugentoewijzing in bytes.
lpBuffer
Wijs een buffer aan die informatie ontvangt van de grootte nBufferSize.
nBufferSize
Een geheel getal dat de grootte van de bestandsbuffer aangeeft, in bytes.
Opmerkingen
Het bestand wordt geopend door de constructor. Roep CFile::Open niet aan.
De tweede overbelasting fungeert hetzelfde als als als u de eerste constructor hebt gebruikt en onmiddellijk koppelen met dezelfde parameters hebt aangeroepen. Zie Attach voor meer informatie.
Voorbeeld
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
Roep deze functie aan om een aanwijzer te krijgen naar het geheugenblok dat wordt gebruikt door CMemFile.
BYTE* Detach();
Retourwaarde
Een aanwijzer naar het geheugenblok dat de inhoud van het geheugenbestand bevat.
Opmerkingen
Als u deze functie aanroept, wordt ook de CMemFile. U kunt het geheugenblok CMemFile opnieuw koppelen door Attach aan te roepen. Als u het bestand opnieuw wilt koppelen en de gegevens erin wilt gebruiken, moet u CFile::GetLength aanroepen om de lengte van het bestand op te halen voordat u aanroept Detach. Als u een geheugenblok CMemFile bijvoegt zodat u de gegevens (nGrowBytes == 0) kunt gebruiken, kunt u het geheugenbestand niet vergroten.
CMemFile::Free
Deze functie wordt aangeroepen door CMemFile lidfuncties.
virtual void Free(BYTE* lpMem);
Parameterwaarden
lpMem
Wijs het geheugen aan om de toewijzing ervan ongedaan te maken.
Opmerkingen
Overschrijf deze functie om aangepaste geheugentoewijzing te implementeren. Als u deze functie overschrijft, wilt u waarschijnlijk ook Alloc en Realloc overschrijven.
CMemFile::GetBufferPtr
Haal of schrijf naar de geheugenbuffer die een geheugenbestand back-ups maakt.
virtual UINT GetBufferPtr(
UINT nCommand,
UINT nCount = 0,
void** ppBufStart = NULL,
void** ppBufMax = NULL
);
Parameterwaarden
nOpdracht
De bufferopdracht die moet worden uitgevoerd (bufferCheck, bufferCommit, bufferReadof bufferWrite).
nCount
Afhankelijk van nOpdracht, het aantal bytes in de buffer om te lezen, schrijven of doorvoeren. Wanneer u vanuit de buffer leest, geeft u -1 op om een buffer van de huidige positie naar het einde van het bestand te retourneren.
ppBufStart
[uit] Het begin van de buffer. Moet zijn NULL wanneer nOpdracht is bufferCommit.
ppBufMax
[uit] Het einde van de buffer. Moet zijn NULL wanneer nOpdracht is bufferCommit.
Retourwaarde
| opdrachtwaarde | Retourwaarde |
|---|---|
buffercheck |
Retourneert bufferDirect als directe buffering wordt ondersteund, anders 0. |
bufferCommit |
Retourneert 0 |
bufferRead of bufferWrite |
Retourneert het aantal bytes in de geretourneerde bufferruimte. ppBufStart en ppBufMax wijzen naar het begin en einde van de lees-/geschreven buffer. |
Opmerkingen
De huidige positie in de geheugenbuffer (m_nPosition) wordt op de volgende manieren geavanceerd, afhankelijk van nOpdracht:
| nOpdracht | bufferpositie |
|---|---|
bufferCommit |
De huidige positie gaat verder met de grootte van de vastgelegde buffer. |
bufferRead |
De huidige positie gaat verder met de grootte van de leesbuffer. |
CMemFile::GrowFile
Deze functie wordt aangeroepen door verschillende CMemFile lidfuncties.
virtual void GrowFile(SIZE_T dwNewLen);
Parameterwaarden
dwNewLen
Nieuwe grootte van het geheugenbestand.
Opmerkingen
U kunt deze overschrijven als u wilt wijzigen hoe CMemFile het bestand groeit. Met de standaard implementatie wordt Realloc aangeroepen om een bestaand blok (of Toewijzen om een geheugenblok te maken), geheugen toe te wijzen in veelvouden van de nGrowBytes waarde die is opgegeven in de constructor of bijvoeging .
CMemFile::Memcpy
Deze functie wordt aangeroepen door de CMemFile onderdrukkingen van CFile::Read en CFile::Write to transfer data to and from the memory file.
virtual BYTE* Memcpy(
BYTE* lpMemTarget,
const BYTE* lpMemSource,
SIZE_T nBytes);
Parameterwaarden
lpMemTarget
Aanwijzer naar het geheugenblok waarin het brongeheugen wordt gekopieerd.
lpMemSource
Aanwijzer naar het brongeheugenblok.
nBytes
Het aantal te kopiëren bytes.
Retourwaarde
Een kopie van lpMemTarget.
Opmerkingen
Overschrijf deze functie als u de manier wilt wijzigen waarop CMemFile deze geheugenkopieën worden uitgevoerd.
CMemFile::Realloc
Deze functie wordt aangeroepen door CMemFile lidfuncties.
virtual BYTE* Realloc(
BYTE* lpMem,
SIZE_T nBytes);
Parameterwaarden
lpMem
Een aanwijzer naar het geheugenblok dat opnieuw moet worden toegewezen.
nBytes
Nieuwe grootte voor het geheugenblok.
Retourwaarde
Een aanwijzer naar het geheugenblok dat opnieuw is toegewezen (en mogelijk is verplaatst) of NULL als de herlocatie is mislukt.
Opmerkingen
Overschrijf deze functie om aangepaste geheugenrelocatie te implementeren. Als u deze functie overschrijft, wilt u waarschijnlijk ook Alloc en Free overschrijven.