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