C++笔记:文档与串行化
来源:优易学  2011-12-21 18:15:45   【优易学:中国教育考试门户网】   资料下载   IT书店

  本章首先介绍了一种新的读写文件方式,使用MFC提供的CArchive类来实现。可以利用CArchive类将对象数据保存到永久设备上。这样即使应用程序关闭,再次启动后仍然可以从磁盘上读取对象数据,然后在内存中重构相应的对象。让数据持久性的过程成为串行化或序列化。

  CArchive对象不仅可以处理基本类型的数据,还可以处理CObject类的派生对象。CArchive类重载了提取(>>)和插入(<<)操作符。通过这些重载的函数,可以利用CArchive对象完成对文件的读写操作。

  CArchive构造函数的声明如下:

  1 CArchive( CFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL );

  pFile:指向文件对象的指针,该文件对象是持久数据的来源或目的地;

  nMode:文件对象的标示符(load,store)读取还是存储;

  CArchive类写入数据的实例:

  01 void CFileView::OnFileWrite()

  02 {

  03        CFile file("7.txt",CFile::modeCreate|CFile::modeWrite);

  04        CArchive ar(&file,CArchive::store);

  05        int i=1;

  06        char ch='1';

  07        float f=1.3f;

  08        CString str="www.colsir.com";

  09        ar<<i<<ch<<f<<str;

  10 }

  完成写入操作之后,用记事本打开7.txt,发现基本上都是乱码。这是因为CArchive对象是一种二进制流。

  CArchive类读取数据的实例:

  01 void CFileView::OnFileRead()

  02 {

  03        CFile file("7.txt",CFile::modeRead);

  04        CArchive ar(&file,CArchive::load);

  05        int i;

  06        char ch;

  07        float f;

  08        CString str;

  09        CString strResult;

  10        ar>>i>>ch>>f>>str;

  11        strResult.Format("%d,%c,%f,%s",i,ch,f,str);

  12        MessageBox(strResult);

  13 }

  对象读取的顺序必须和保存的顺序一致,有些搞不懂,那CArchive类还有什么优势?暂时理解不了。

  MFC新建,保存文件时的格式过滤

  在字符串表中一个ID为IDR_MAINFRAME的行,用来实现一些初始值的设置。该项的值的优先级低于OnNewDocument函数中的设置。通过查看OnNewDocument函数的申明,可以看到OnNewDocument函数是一个虚函数。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训