Partilhar via


CMemFile Classe

A classe derivada de CFile, que suporta arquivos de memória.

Sintaxe

class CMemFile : public CFile

Membros

Construtores Públicos

Nome Descrição
CMemFile::CMemFile Constrói um objeto de arquivo de memória.

Métodos Públicos

Nome Descrição
CMemFile::Anexar Anexa um bloco de memória ao CMemFile.
CMemFile::D etach Desanexa o bloco de memória e CMemFile retorna um ponteiro para o bloco de memória desanexado.
CMemFile::GetBufferPtr Obtenha ou grave no buffer de memória que faz backup de um arquivo de memória.

Métodos Protegidos

Nome Descrição
CMemFile::Alloc Substituir para modificar o comportamento de alocação de memória.
CMemFile::Grátis Substituir para modificar o comportamento de desalocação de memória.
CMemFile::GrowFile Substituir para modificar o comportamento ao criar um arquivo.
CMemFile::Memcpy Substituir para modificar o comportamento da cópia de memória ao ler e gravar arquivos.
CMemFile::Realloc Substituir para modificar o comportamento de realocação de memória.

Observações

Esses arquivos de memória se comportam como arquivos de disco, exceto que o arquivo é armazenado na RAM em vez de no disco. Um arquivo de memória é útil para:

  • Armazenamento temporário rápido
  • transferência de bytes brutos entre processos independentes
  • Transferência de objetos serializados entre processos independentes

CMemFile Os objetos podem alocar automaticamente sua própria memória. Ou, você pode anexar seu próprio bloco de memória ao CMemFile objeto chamando Attach. Em ambos os casos, a memória para aumentar o arquivo de memória automaticamente é alocada em nGrowBytesincrementos de tamanho se nGrowBytes não for zero.

O bloco de memória será automaticamente excluído após a CMemFile destruição do objeto se a memória foi originalmente alocada pelo CMemFile objeto, caso contrário, você é responsável por deslocalizar a memória anexada ao objeto.

Você pode acessar o bloco de memória através do ponteiro fornecido quando o desanexa do CMemFile objeto chamando Desanexar.

O uso mais comum é CMemFile criar um CMemFile objeto e usá-lo chamando funções de membro CFile . Criar um CMemFile abre automaticamente: você não chama CFile::Open, que é usado apenas para arquivos de disco. Como CMemFile não usa um arquivo de disco, o membro CFile::m_hFile de dados não é usado.

As CFile funções de membro Duplicate, LockRange e UnlockRange não são implementadas para CMemFile. Se você chamar essas funções em um CMemFile objeto, obterá um CNotSupportedException.

CMemFile usa as funções de biblioteca de tempo de execução malloc, realloc e livre para alocar, realocar e desalocar memória; e o memcpy intrínseco para bloquear a memória de cópia ao ler e escrever. Se você quiser alterar esse comportamento ou o comportamento quando CMemFile um arquivo cresce, derive sua própria classe e CMemFile substitua as funções apropriadas.

Para obter mais informações sobre CMemFileo , consulte os artigos Arquivos no MFC e Gerenciamento de Memória (MFC) e consulte Tratamento de arquivos na Referência da bibliotecaRun-Time.

Hierarquia de herança

CObject

CFile

CMemFile

Requerimentos

Cabeçalho: afx.h

CMemFile::Alloc

Esta função é chamada por CMemFile funções de membro.

virtual BYTE* Alloc(SIZE_T nBytes);

Parâmetros

nBytes
Número de bytes de memória a alocar.

Valor de retorno

Um ponteiro para o bloco de memória que foi alocado ou NULL se a alocação falhou.

Observações

Substitua essa função para implementar a alocação de memória personalizada. Se você substituir essa função, provavelmente também desejará substituir Free e Realloc .

A implementação padrão usa a função de biblioteca de tempo de execução malloc para alocar memória.

CMemFile::Anexar

Chame essa função para anexar um bloco de memória ao CMemFile.

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

Parâmetros

lpBuffer
Ponteiro para o buffer a ser anexado ao CMemFile.

nBufferSize
Um inteiro que especifica o tamanho do buffer em bytes.

nGrowBytes
O incremento de alocação de memória em bytes.

Observações

Isso faz com que CMemFile use o bloco de memória como o arquivo de memória.

Se nGrowBytes for 0, CMemFile definirá o comprimento do arquivo como nBufferSize. Isso significa que os dados no bloco de memória antes de ser anexado CMemFile serão usados como o arquivo. Os ficheiros de memória criados desta forma não podem ser aumentados.

Como o arquivo não pode ser aumentado, tenha cuidado para não causar CMemFile a tentativa de aumentar o arquivo. Por exemplo, não chame as CMemFile substituições de CFile::Write para escrever após o final ou não chame CFile::SetLength com um comprimento maior que nBufferSize.

Se nGrowBytes for maior que 0, CMemFile ignorará o conteúdo do bloco de memória anexado. Você terá que escrever o conteúdo do arquivo de memória do zero usando a CMemFile substituição de CFile::Write. Se você tentar gravar após o final do arquivo ou aumentar o arquivo chamando a CMemFile substituição de , CFile::SetLength aumentará a alocação de CMemFilememória em incrementos de nGrowBytes. O aumento da alocação de memória falhará se o bloco de memória para o Attach qual você passar não tiver sido alocado com um método compatível com o Alloc. Para ser compatível com a implementação padrão do , você deve alocar a memória com a função de biblioteca de Alloctempo de execução malloc ou calloc.

CMemFile::CMemFile

A primeira sobrecarga abre um arquivo de memória vazio.

CMemFile(UINT nGrowBytes = 1024);

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

Parâmetros

nGrowBytes
O incremento de alocação de memória em bytes.

lpBuffer
Ponteiro para um buffer que recebe informações do tamanho nBufferSize.

nBufferSize
Um inteiro que especifica o tamanho do buffer de arquivo, em bytes.

Observações

O arquivo é aberto pelo construtor. Não chame CFile::Open.

A segunda sobrecarga age da mesma forma como se você usasse o primeiro construtor e imediatamente chamado Attach com os mesmos parâmetros. Consulte Attach para obter detalhes.

Exemplo

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

Chame essa função para obter um ponteiro para o bloco de memória que está sendo usado pelo CMemFile.

BYTE* Detach();

Valor de retorno

Um ponteiro para o bloco de memória que contém o conteúdo do arquivo de memória.

Observações

Chamar essa função também fecha o CMemFile. Você pode reanexar o bloco de memória chamando CMemFileAttach. Se você quiser reanexar o arquivo e usar os dados nele, você deve chamar CFile::GetLength para obter o comprimento do arquivo antes de chamar Detach. Se você anexar um bloco de memória para CMemFile que você possa usar seus dados (nGrowBytes == 0), então você não pode aumentar o arquivo de memória.

CMemFile::Grátis

Esta função é chamada por CMemFile funções de membro.

virtual void Free(BYTE* lpMem);

Parâmetros

lpMem
Ponteiro para a memória a ser deslocalizada.

Observações

Substitua essa função para implementar a deslocalização de memória personalizada. Se você substituir essa função, provavelmente também desejará substituir Alloc e Realloc .

CMemFile::GetBufferPtr

Obtenha ou grave no buffer de memória que faz backup de um arquivo de memória.

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

Parâmetros

nComando
O bufferCommand a ser executado (bufferCheck, bufferCommit, bufferRead, ou bufferWrite).

nContagem
Dependendo do nCommand, o número de bytes no buffer para ler, gravar ou confirmar. Ao ler a partir do buffer, especifique -1 para retornar um buffer da posição atual para o final do arquivo.

ppBufStart
[saídas] O início do buffer. Deve ser NULL quando nCommand é bufferCommit.

ppBufMax
[saídas] O fim do buffer. Deve ser NULL quando nCommand é bufferCommit.

Valor de retorno

valor do comando Valor de retorno
buffercheck Retorna bufferDirect se o buffer direto for suportado, caso contrário, 0.
bufferCommit Devoluções 0
bufferRead ou bufferWrite Retorna o número de bytes no espaço de buffer retornado. ppBufStart e ppBufMax apontam para o início e o fim do buffer de leitura/gravação.

Observações

A posição atual no buffer de memória (m_nPosition) é avançada das seguintes maneiras, dependendo do nCommand:

nComando posição tampão
bufferCommit A posição atual avança pelo tamanho do buffer comprometido.
bufferRead A posição atual avança pelo tamanho do buffer de leitura.

CMemFile::GrowFile

Esta função é chamada por várias das CMemFile funções de membro.

virtual void GrowFile(SIZE_T dwNewLen);

Parâmetros

dwNewLen
Novo tamanho do arquivo de memória.

Observações

Você pode substituí-lo se quiser alterar a forma como CMemFile o arquivo cresce. A implementação padrão chama Realloc para aumentar um bloco existente (ou Alloc para criar um bloco de memória), alocando memória em múltiplos do nGrowBytes valor especificado no construtor ou chamada Attach .

CMemFile::Memcpy

Esta função é chamada pelas CMemFile substituições de CFile::Read e CFile::Write para transferir dados de e para o arquivo de memória.

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

Parâmetros

lpMemTarget
Ponteiro para o bloco de memória no qual a memória de origem será copiada.

lpMemSource
Ponteiro para o bloco de memória de origem.

nBytes
Número de bytes a serem copiados.

Valor de retorno

Uma cópia de lpMemTarget.

Observações

Substitua essa função se você quiser alterar a maneira como CMemFile essas cópias de memória.

CMemFile::Realloc

Esta função é chamada por CMemFile funções de membro.

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

Parâmetros

lpMem
Um ponteiro para o bloco de memória a ser realocado.

nBytes
Novo tamanho para o bloco de memória.

Valor de retorno

Um ponteiro para o bloco de memória que foi realocado (e possivelmente movido) ou NULL se a realocação falhar.

Observações

Substitua essa função para implementar a realocação de memória personalizada. Se você substituir essa função, provavelmente também desejará substituir Alloc e Free .

Ver também

CFile Classe
Gráfico de Hierarquia