Fazendo bypass do mecanismo de serialização
Como você viu, a estrutura fornece uma maneira padrão de ler e gravar dados de e para arquivos. A serialização por meio de um objeto de arquivo atende às necessidades de muitos aplicativos. Um aplicativo como esses lê um arquivo inteiramente na memória, permite que o usuário atualize o arquivo e, em seguida, grava a versão atualizada no disco novamente.
No entanto, alguns aplicativos operam em dados de forma muito diferente; para esses aplicativos, a serialização por meio de um arquivo não é adequada. Exemplos incluem programas de banco de dados, programas que editam apenas partes de arquivos grandes, programas que gravam arquivos somente texto e programas que compartilham arquivos de dados.
Nesses casos, você pode substituir a função Serialize de uma maneira diferente para mediar ações de arquivo por meio de um objeto CFile em vez de um objeto CArchive.
Você pode usar as funções membro Open
, Read
, Write
, Close
e Seek
da classe CFile
para abrir um arquivo, mover o ponteiro do arquivo (buscar) para um ponto específico no arquivo, ler um registro (um número especificado de bytes) nesse ponto, permitir que o usuário atualize o registro e, em seguida, buscar o mesmo ponto novamente e gravar o registro de volta no arquivo. A estrutura abrirá o arquivo para você, que poderá usar a função membro GetFile
da classe CArchive
para obter um ponteiro para o objeto CFile
. Para uso ainda mais sofisticado e flexível, você pode substituir as funções de membro OnOpenDocument e OnSaveDocument da classe CWinApp
. Para obter mais informações, consulte a classe CFile na Referência do MFC.
Nesse cenário, sua substituição Serialize
não produz nada, a menos que, por exemplo, você queira que ele leia e escreva um cabeçalho de arquivo para mantê-lo atualizado quando o documento for fechado.