Classe CMemFile

Classe derivata da CFile che supporta i file di memoria.

Sintassi

class CMemFile : public CFile

Membri

Costruttori pubblici

Nome Descrizione
CMemFile::CMemFile Costruisce un oggetto file di memoria.

Metodi pubblici

Nome Descrizione
CMemFile::Attach Collega un blocco di memoria a CMemFile.
CMemFile::D etach Scollega il blocco di memoria da CMemFile e restituisce un puntatore al blocco di memoria scollegato.
CMemFile::GetBufferPtr Ottenere o scrivere nel buffer di memoria che esegue il backup di un file di memoria.

Metodi protetti

Nome Descrizione
CMemFile::Alloc Eseguire l'override per modificare il comportamento di allocazione della memoria.
CMemFile::Free Eseguire l'override per modificare il comportamento di deallocazione della memoria.
CMemFile::GrowFile Eseguire l'override per modificare il comportamento durante l'aumento di un file.
CMemFile::Memcpy Eseguire l'override per modificare il comportamento di copia della memoria durante la lettura e la scrittura di file.
CMemFile::Realloc Eseguire l'override per modificare il comportamento di riallocazione della memoria.

Osservazioni:

Questi file di memoria si comportano come file su disco, ad eccezione del file archiviato in RAM anziché su disco. Un file di memoria è utile per:

  • archiviazione temporanea veloce
  • trasferimento di byte non elaborati tra processi indipendenti
  • trasferimento di oggetti serializzati tra processi indipendenti

CMemFile gli oggetti possono allocare automaticamente la propria memoria. In alternativa, è possibile collegare il proprio blocco di memoria all'oggetto CMemFile chiamando Attach. In entrambi i casi, la memoria per l'aumento automatico del file di memoria viene allocata in incrementi di nGrowBytesdimensioni se nGrowBytes non è zero.

Il blocco di memoria verrà eliminato automaticamente in caso di distruzione dell'oggetto CMemFile se la memoria è stata originariamente allocata dall'oggetto CMemFile . In caso contrario, si è responsabili della deallocazione della memoria associata all'oggetto.

È possibile accedere al blocco di memoria tramite il puntatore fornito quando lo si scollega dall'oggetto CMemFile chiamando Detach.

L'uso più comune di CMemFile consiste nel creare un CMemFile oggetto e usarlo chiamando le funzioni membro CFile . La creazione di un CMemFile oggetto viene aperta automaticamente: non si chiama CFile::Open, che viene usata solo per i file su disco. Poiché CMemFile non usa un file su disco, il membro CFile::m_hFile dati non viene usato.

Le CFile funzioni membro Duplicate, LockRange e UnlockRange non vengono implementate per CMemFile. Se si chiamano queste funzioni su un CMemFile oggetto, si otterrà un'eccezione CNotSupportedException.

CMemFileusa le funzioni della libreria di runtime malloc, realloc e free per allocare, riallocare e deallocare memoria e il memcpy intrinseco per bloccare la memoria di copia durante la lettura e la scrittura. Se si vuole modificare questo comportamento o il comportamento in caso CMemFile di crescita di un file, derivare la propria classe da CMemFile ed eseguire l'override delle funzioni appropriate.

Per altre informazioni su CMemFile, vedere gli articoli File in MFC e Gestione della memoria (MFC) e vedere Gestione dei file nelle informazioni di riferimento sulla libreria di runtime.

Gerarchia di ereditarietà

CObject

CFile

CMemFile

Requisiti

Intestazione: afx.h

CMemFile::Alloc

Questa funzione viene chiamata dalle CMemFile funzioni membro.

virtual BYTE* Alloc(SIZE_T nBytes);

Parametri

nBytes
Numero di byte di memoria da allocare.

Valore restituito

Puntatore al blocco di memoria allocato o NULL se l'allocazione non è riuscita.

Osservazioni:

Eseguire l'override di questa funzione per implementare l'allocazione di memoria personalizzata. Se si esegue l'override di questa funzione, è probabile che si voglia eseguire l'override anche di Free e Realloc .

L'implementazione predefinita usa la funzione della libreria di runtime malloc per allocare memoria.

CMemFile::Attach

Chiamare questa funzione per collegare un blocco di memoria a CMemFile.

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

Parametri

lpBuffer
Puntatore al buffer da collegare a CMemFile.

nBufferSize
Intero che specifica le dimensioni del buffer in byte.

nGrowBytes
Incremento dell'allocazione di memoria in byte.

Osservazioni:

Ciò comporta CMemFile l'uso del blocco di memoria come file di memoria.

Se nGrowBytes è 0, CMemFile imposta la lunghezza del file su nBufferSize. Ciò significa che i dati nel blocco di memoria prima che siano stati collegati a CMemFile verranno usati come file. I file di memoria creati in questo modo non possono essere cresciuti.

Poiché il file non può essere cresciuto, prestare attenzione a non fare in modo CMemFile che si tenti di aumentare il file. Ad esempio, non chiamare gli CMemFile override di CFile:Write per scrivere oltre la fine o non chiamare CFile:SetLength con lunghezza superiore a nBufferSize.

Se nGrowBytes è maggiore di 0, CMemFile ignorerà il contenuto del blocco di memoria associato. Sarà necessario scrivere il contenuto del file di memoria da zero usando l'override CMemFile di CFile::Write. Se si tenta di scrivere oltre la fine del file o aumentare il file chiamando l'override di CFile::SetLength, l'allocazione CMemFile di memoria aumenta in incrementi di nGrowBytesCMemFile. La crescita dell'allocazione di memoria avrà esito negativo se il blocco di memoria passato a Attach non è stato allocato con un metodo compatibile con Alloc. Per essere compatibile con l'implementazione predefinita di Alloc, è necessario allocare la memoria con la funzione della libreria di runtime malloc o calloc.

CMemFile::CMemFile

Il primo overload apre un file di memoria vuoto.

CMemFile(UINT nGrowBytes = 1024);

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

Parametri

nGrowBytes
Incremento dell'allocazione di memoria in byte.

Puntatore lpBuffer a un buffer che riceve informazioni sulle dimensioni nBufferSize.

nBufferSize
Intero che specifica le dimensioni del buffer del file, in byte.

Osservazioni:

Il file viene aperto dal costruttore . Non chiamare CFile::Open.

Il secondo overload funziona come se fosse stato usato il primo costruttore e immediatamente chiamato Attach con gli stessi parametri. Per informazioni dettagliate, vedere Attach.

Esempio

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

Chiamare questa funzione per ottenere un puntatore al blocco di memoria usato da CMemFile.

BYTE* Detach();

Valore restituito

Puntatore al blocco di memoria che contiene il contenuto del file di memoria.

Osservazioni:

La chiamata a questa funzione chiude anche .CMemFile È possibile ricollegare il blocco di memoria a chiamando Attach.You can reattach the memory block to CMemFile by calling Attach. Se si vuole ricollegare il file e usarli, è necessario chiamare CFile::GetLength per ottenere la lunghezza del file prima di chiamare .Detach Se si collega un blocco di memoria a CMemFile in modo che sia possibile usare i relativi dati ( nGrowBytes == 0), non è possibile aumentare il file di memoria.

CMemFile::Free

Questa funzione viene chiamata dalle CMemFile funzioni membro.

virtual void Free(BYTE* lpMem);

Parametri

lpMem
Puntatore alla memoria da deallocare.

Osservazioni:

Eseguire l'override di questa funzione per implementare la deallocazione della memoria personalizzata. Se si esegue l'override di questa funzione, è probabile che si voglia eseguire anche l'override di Alloc e Realloc .

CMemFile::GetBufferPtr

Ottenere o scrivere nel buffer di memoria che esegue il backup di un file di memoria.

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

Parametri

nCommand
BufferCommand da eseguire (bufferCheck, bufferCommit, bufferReado bufferWrite ).

nCount
A seconda di nCommand, il numero di byte nel buffer da leggere, scrivere o eseguire il commit. Quando si legge dal buffer, specificare -1 per restituire un buffer dalla posizione corrente alla fine del file.

ppBufStart
[out] Inizio del buffer. Deve essere NULL quando nCommand è bufferCommit.

ppBufMax
[out] Fine del buffer. Deve essere NULL quando nCommand è bufferCommit.

Valore restituito

valore del comando Valore restituito
buffercheck Restituisce bufferDirect se il buffer diretto è supportato; in caso contrario, 0.
bufferCommit Restituisce 0.
bufferRead oppure bufferWrite Restituisce il numero di byte nello spazio buffer restituito. ppBufStart e ppBufMax puntano all'inizio e alla fine del buffer di lettura/scrittura.

Osservazioni:

La posizione corrente nel buffer di memoria (m_nPosition) è avanzata nei modi seguenti, a seconda di nCommand:

nCommand posizione buffer
bufferCommit La posizione corrente avanza in base alle dimensioni del buffer di cui è stato eseguito il commit.
bufferRead La posizione corrente avanza in base alle dimensioni del buffer di lettura.

CMemFile::GrowFile

Questa funzione viene chiamata da diverse funzioni CMemFile membro.

virtual void GrowFile(SIZE_T dwNewLen);

Parametri

dwNewLen
Nuove dimensioni del file di memoria.

Osservazioni:

È possibile eseguirne l'override se si vuole modificare la CMemFile modalità di crescita del file. L'implementazione predefinita chiama Realloc per aumentare un blocco esistente (o Alloc per creare un blocco di memoria), allocando memoria in multipli del nGrowBytes valore specificato nel costruttore o nella chiamata Attach .

CMemFile::Memcpy

Questa funzione viene chiamata dagli CMemFile override di CFile::Read e CFile::Write per trasferire i dati da e verso il file di memoria.

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

Parametri

lpMemTarget
Puntatore al blocco di memoria in cui verrà copiata la memoria di origine.

lpMemSource
Puntatore al blocco di memoria di origine.

nBytes
Numero di byte da copiare.

Valore restituito

Copia di lpMemTarget.

Osservazioni:

Eseguire l'override di questa funzione se si vuole modificare il modo in cui CMemFile vengono copiate queste copie di memoria.

CMemFile::Realloc

Questa funzione viene chiamata dalle CMemFile funzioni membro.

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

Parametri

lpMem
Puntatore al blocco di memoria da riallocare.

nBytes
Nuove dimensioni per il blocco di memoria.

Valore restituito

Puntatore al blocco di memoria riallocato (ed eventualmente spostato) o NULL se la riallocazione non è riuscita.

Osservazioni:

Eseguire l'override di questa funzione per implementare la riallocazione della memoria personalizzata. Se si esegue l'override di questa funzione, è probabile che si voglia eseguire anche l'override di Alloc e Free .

Vedi anche

Classe CFile
Grafico della gerarchia