Compartilhar via


Duas maneiras de criar um objeto CArchive

Há duas maneiras de criar um CArchive objeto:

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 CArchive objeto para seu documento em nome dos comandos Salvar, Salvar como e Abrir no menu Arquivo.

Veja o que a estrutura faz quando o usuário do aplicativo emite o comando Salvar como no menu Arquivo:

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

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

  3. Cria um CArchive objeto que aponta para esse CFile objeto. Ao criar o CArchive objeto, 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.

Em seguida, a função do Serialize documento grava dados no CArchive objeto, 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 qualquer objeto derivado 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 CArchive objeto. Por exemplo, talvez você queira serializar dados de e para a Área de Transferência, representados por um objeto CSharedFile. Ou talvez você queira usar uma interface do usuário para salvar um arquivo diferente daquele oferecido pela estrutura. Nesse caso, você pode criar explicitamente um CArchive objeto. Você faz isso da mesma maneira que o framework faz, usando o seguinte procedimento.

Para criar explicitamente um objeto CArchive

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

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

Quando terminar de armazenar ou carregar dados de ou para o objeto CArchive, feche-o. Embora os objetos CArchive (e CFile) fechem automaticamente o arquivo (e o arquivo), é uma boa prática fazer isso explicitamente, pois facilita a recuperação de erros. Para obter mais informações sobre o tratamento de erros, consulte o artigo Exceções: Capturando e excluindo exceções.

Para fechar o objeto CArchive

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

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

Consulte também

Serialização: Serializando um objeto