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:

  1. Apresenta a caixa de diálogo Salvar como e obtém do usuário o nome do arquivo.

  2. Abre o arquivo nomeado pelo usuário como um objeto CFile.

  3. Cria um objeto CArchive que aponta para esse objeto CFile. Ao criar o objeto CArchive, a estrutura define o modo como "armazenar" (gravar, serializar), em vez de "carregar" (ler, desserializar).

  4. Chama a função Serialize definida em sua classe derivada CDocument, passando-a uma referência ao objeto CArchive.

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

  1. Construa um objeto CFile ou um objeto derivado de CFile.

  2. Passe o objeto CFile para o construtor para CArchive, 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ção Serialize de um objeto verifica esse estado chamando a função IsStoring 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

  1. O exemplo a seguir ilustra como fechar o objeto CArchive:

    archive.Close();
    theFile.Close();
    

Confira também

Serialização: serializando um objeto