Два способа создать объект CArchive
Существует два способа создания CArchive
объекта:
Неявное создание объекта CArchive с помощью платформы
Самый распространенный и самый простой способ — позволить платформе создавать CArchive
объект для документа от имени команды Save, Save As и Open в меню "Файл".
Вот что делает платформа, когда пользователь приложения выдает команду "Сохранить как" в меню "Файл":
Представляет диалоговое окно "Сохранить как" и получает имя файла от пользователя.
Открывает файл с именем пользователя в качестве
CFile
объекта.Создает объект, указывающий
CArchive
на этотCFile
объект. При созданииCArchive
объекта платформа задает режим "store" (запись, сериализация), а не "load" (чтение, десериализация).Serialize
Вызывает функцию, определенную вCDocument
производном классе, передавая ссылку наCArchive
объект.
Затем функция документа Serialize
записывает данные в CArchive
объект, как описано в ближайшее время. После возвращения из Serialize
функции платформа уничтожает CArchive
объект, а затем CFile
объект.
Таким образом, если платформа позволит создать CArchive
объект для документа, все, что необходимо сделать, — реализовать функцию документа Serialize
, которая записывает и считывает в архив и из него. Кроме того, необходимо реализовать Serialize
любые CObject
производные объекты, которые функция документа Serialize
в свою очередь сериализует прямо или косвенно.
Явное создание объекта CArchive
Помимо сериализации документа с помощью платформы, существуют и другие случаи, когда может потребоваться CArchive
объект. Например, может потребоваться сериализовать данные в буфер обмена и из буфера обмена, представленный CSharedFile
объектом. Кроме того, вы можете использовать пользовательский интерфейс для сохранения файла, отличного от файла, предлагаемого платформой. В этом случае можно явно создать CArchive
объект. Это можно сделать так же, как платформа, используя следующую процедуру.
Явное создание объекта CArchive
CFile
Создание объекта или объекта, производного отCFile
.Передайте объект конструктору
CFile
CArchive
, как показано в следующем примере:CFile theFile; theFile.Open(_T("CArchive__Test.txt"), CFile::modeCreate | CFile::modeWrite); CArchive archive(&theFile, CArchive::store);
Второй аргумент
CArchive
конструктора — это перечисленное значение, указывающее, будет ли архив использоваться для хранения или загрузки данных в файл или из нее. ФункцияSerialize
объекта проверка это состояние путем вызоваIsStoring
функции для архивного объекта.
Завершив хранение или загрузку данных в объект или из CArchive
него, закройте его. CArchive
Хотя объекты (иCFile
) автоматически закрывают архив (и файл), рекомендуется явно сделать это, так как это упрощает восстановление от ошибок. Дополнительные сведения об обработке ошибок см. в статье "Исключения: перехват и удаление исключений".
Закрытие объекта CArchive
В следующем примере показано, как закрыть
CArchive
объект:archive.Close(); theFile.Close();