Duas maneiras de criar um objeto CArchive
Há duas maneiras de criar um objeto CArchive
:
Criação implícita de um objeto CArchive por meio da estrutura
A maneira mais comum e mais fácil é permitir que a estrutura crie um objeto CArchive
para o documento com base nos comandos Salvar, Salvar como e Abrir do menu Arquivo.
Veja o que a estrutura faz quando o usuário do seu aplicativo emite o comando Salvar como no menu Arquivo:
Apresenta a caixa de diálogo Salvar como e obtém do usuário o nome do arquivo.
Abre o arquivo nomeado pelo usuário como um objeto
CFile
.Cria um objeto
CArchive
que aponta para esse objetoCFile
. Ao criar o objetoCArchive
, a estrutura define o modo como "armazenar" (gravar, serializar), em vez de "carregar" (ler, desserializar).Chama a função
Serialize
definida em sua classe derivadaCDocument
, passando-a uma referência ao objetoCArchive
.
A função Serialize
do seu documento grava dados no objeto CArchive
, conforme explicado em breve. Após o retorno de sua função Serialize
, a estrutura destrói o objeto CArchive
e, em seguida, o objeto CFile
.
Portanto, se você permitir que a estrutura crie o objeto CArchive
para o seu documento, basta implementar a função Serialize
do documento que grava e lê de e para o arquivo. Você também precisa implementar Serialize
para objetos derivados de CObject
que a função do documento Serialize
, por sua vez, serializa direta ou indiretamente.
Criação explícita de um objeto CArchive
Além de serializar um documento por meio da estrutura, há outras ocasiões em que você pode precisar de um objeto CArchive
. Por exemplo, talvez você queira serializar dados de e para a Área de Transferência, representados por um objeto CSharedFile
. Ou você pode querer usar uma interface do usuário para salvar um arquivo diferente daquele oferecido pela estrutura. Nesse caso, você pode criar explicitamente um objeto CArchive
. Você faz isso da mesma maneira que a estrutura, usando o procedimento a seguir.
Para criar explicitamente um objeto CArchive
Construa um objeto
CFile
ou um objeto derivado deCFile
.Passe o objeto
CFile
para o construtor paraCArchive
, conforme mostrado no exemplo a seguir:CFile theFile; theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite); CArchive archive(&theFile, CArchive::store);
O segundo argumento para o construtor
CArchive
é um valor enumerado que especifica se o arquivo será usado para armazenar ou carregar dados de ou para o arquivo. A funçãoSerialize
de um objeto verifica esse estado chamando a funçãoIsStoring
para o objeto de arquivo.
Quando terminar de armazenar ou carregar dados de ou para o objeto CArchive
, feche-os. Embora os objetos CArchive
(e CFile
) fechem automaticamente a camada de arquivos (e o arquivo), é uma boa prática fazer isso explicitamente, pois facilita a recuperação de erros. Para obter mais informações sobre tratamento de erro, confira o artigo Exceções: capturar e excluir exceções.
Para fechar o objeto CArchive
O exemplo a seguir ilustra como fechar o objeto
CArchive
:archive.Close(); theFile.Close();