正如你所看到的,框架提供了一种读取和写入文件数据的默认方法。 通过存档对象进行序列化符合许多应用程序的需求。 此类应用程序将文件完全读取到内存中,允许用户更新该文件,然后再次将更新的版本写入磁盘。
但是,某些应用程序以非常不同的方式对数据进行作,对于通过存档序列化的这些应用程序,则不适用。 示例包括数据库程序、仅编辑部分大型文件的程序、写入纯文本文件的程序以及共享数据文件的程序。
在这些情况下,可以采用不同的方式重写 Serialize 函数,以通过 CFile 对象而不是 CArchive 对象对文件作进行调解。
可以使用类CFile
的成员Seek
Open
Read
Write
Close
函数打开文件,将文件指针(seek)移动到文件中的特定点,在该点读取记录(指定的字节数),让用户更新记录,然后再次查找同一点并将记录写回文件。 框架将为你打开该文件,你可以使用 GetFile
类 CArchive
的成员函数获取指向对象的 CFile
指针。 为了更复杂和灵活的使用,可以替代类CWinApp
的 OnOpenDocument 和 OnSaveDocument 成员函数。 有关详细信息,请参阅 MFC 参考中的类 CFile。
在此方案中, Serialize
重写不执行任何作,除非(例如,需要读取和写入文件标头)以使其在文档关闭时保持最新状态。