可通过两种方式创建 CArchive
对象:
通过框架隐式创建 CArchive 对象
最常见的、最简单的方法是让框架代表“文件”菜单上的“保存”、“另存为”和“打开”命令为文档创建 CArchive
对象。
下面是当应用程序用户从“文件”菜单中发出“另存为”命令时框架执行的作:
显示“ 另存为 ”对话框并从用户获取文件名。
将用户命名的文件作为对象打开
CFile
。创建指向
CArchive
此CFile
对象的对象。 在创建CArchive
对象时,框架将模式设置为“store”(写入、序列化),而不是“加载”(读取、反序列化)。Serialize
调用在 -derived 类中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();