Поделиться через


Два способа создать объект CArchive

Существует два способа создания CArchive объекта:

Неявное создание объекта CArchive с помощью платформы

Самый распространенный и самый простой способ — позволить платформе создавать CArchive объект для документа от имени команды Save, Save As и Open в меню "Файл".

Вот что делает платформа, когда пользователь приложения выдает команду "Сохранить как" в меню "Файл":

  1. Представляет диалоговое окно "Сохранить как" и получает имя файла от пользователя.

  2. Открывает файл с именем пользователя в качестве CFile объекта.

  3. Создает объект, указывающий CArchive на этот CFile объект. При создании CArchive объекта платформа задает режим "store" (запись, сериализация), а не "load" (чтение, десериализация).

  4. Serialize Вызывает функцию, определенную в CDocumentпроизводном классе, передавая ссылку на CArchive объект.

Затем функция документа Serialize записывает данные в CArchive объект, как описано в ближайшее время. После возвращения из Serialize функции платформа уничтожает CArchive объект, а затем CFile объект.

Таким образом, если платформа позволит создать CArchive объект для документа, все, что необходимо сделать, — реализовать функцию документа Serialize , которая записывает и считывает в архив и из него. Кроме того, необходимо реализовать Serialize любые CObjectпроизводные объекты, которые функция документа Serialize в свою очередь сериализует прямо или косвенно.

Явное создание объекта CArchive

Помимо сериализации документа с помощью платформы, существуют и другие случаи, когда может потребоваться CArchive объект. Например, может потребоваться сериализовать данные в буфер обмена и из буфера обмена, представленный CSharedFile объектом. Кроме того, вы можете использовать пользовательский интерфейс для сохранения файла, отличного от файла, предлагаемого платформой. В этом случае можно явно создать CArchive объект. Это можно сделать так же, как платформа, используя следующую процедуру.

Явное создание объекта CArchive

  1. CFile Создание объекта или объекта, производного от CFile.

  2. Передайте объект конструктору CFileCArchive, как показано в следующем примере:

    CFile theFile;
    theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite);
    CArchive archive(&theFile, CArchive::store);
    

    Второй аргумент CArchive конструктора — это перечисленное значение, указывающее, будет ли архив использоваться для хранения или загрузки данных в файл или из нее. Функция Serialize объекта проверка это состояние путем вызова IsStoring функции для архивного объекта.

Завершив хранение или загрузку данных в объект или из CArchive него, закройте его. CArchive Хотя объекты (иCFile) автоматически закрывают архив (и файл), рекомендуется явно сделать это, так как это упрощает восстановление от ошибок. Дополнительные сведения об обработке ошибок см. в статье "Исключения: перехват и удаление исключений".

Закрытие объекта CArchive

  1. В следующем примере показано, как закрыть CArchive объект:

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

См. также

Сериализация. Сериализация объекта