编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 串行化基础
  · 串行化基础

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  108 篇
技术分:  1156 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 14:01:07
          楼主
串行化基础
在介绍串行化之前,首先介绍一下与串行化有关的CArchive类。CArchive类简化了对文件的读写操作,它能够将对象的数据永久的保留到磁盘文件中,并能够从磁盘文件中恢复对象。在CArchive类中重载了C++的<<和>>运算符,其中<<用于将CObject类型或基本类型的数据存储到文件中,>>则从文件中加载CObject或基本类型的数据。下面介绍一下CArchive类的主要方法。
(1)CArchive
该方法是CArchive类的构造函数。
语法:
CArchive(CFile* pFile,UINT nMode,int nBufSize = 4096,void* lpBuf = NULL );
参数说明:
 pFile:表示文件对象指针,对象的数据将存储在该文件中。
 nMode:表示对象是加载数据还是保存数据。为CArchive::load,表示从存档对象中加载数据。为CArchive::store,表示存储对象到存档对象中。为CArchive::bNoFlushOnDelete,表示禁止存档对象在释放时自动调用Flush方法。
 nBufSize:表示内部文件缓冲区大小,默认为4096个字节。
 lpBuf:表示一个可选的指针,执行用户提供的nBufSize大小的缓冲区。如果未指定该参数,存档对象从应用程序的局部堆中分配缓冲区,并且在对象释放时释放缓冲区。如果用户指定了该缓冲区,在对象释放后需要手动释放该缓冲区。
(2)Read
该方法用于从存档对象中读取数据。
语法:
UINT Read(void* lpBuf,UINT nMax);
参数说明:
 lpBuf:表示接收数据的缓冲区。
 nMax:以字节为单位表示读取数据的大小。
(3)Write
该方法向存档对象中写入数据。
语法:
void Write(const void* lpBuf,UINT nMax);
参数说明:
 lpBuf:表示写入数据的缓冲区。
 nMax:以字节为单位表示写入数据的大小。
(4)IsLoading
该方法确定存档对象是否被加载数据。
语法:
BOOL IsLoading( ) const;
(5)IsStoring
该方法确定存档对象是否存储数据。
语法:
BOOL IsStoring( ) const;
下面通过一个示例来演示如何使用CArchive类读写文件。
例如,使用CArchive类读写文件
(1)创建一个基于对话框的工程,工程名称为“RWFile”。
(2)处理“写入”按钮的单击事件,向文件中写入数据。
void CRWFileDlg::OnWrite()
{
 CFile file("demo.txt",CFile::modeCreate|CFile::modeWrite); //定义一个文件对象,并创建文件
 CArchive ar(&file,CArchive::store);      //定义一个存档对象
 int idata = 100;          //定义整型变量
 char chdata = 'M';         //定义字符变量
 double fdata = 50.45;        //定义实型变量
 CString strInfo = "明天会更好";       //定义字符串变量
 ar<<idata<<chdata<<fdata<<strInfo;      //写入数据
}
(3)处理“读取”按钮的单击事件,从文件中读取数据。
void CRWFileDlg::OnRead()
{
 CFile file("demo.txt",CFile::modeRead);     //定义文件对象,读取文件
 CArchive ar(&file,CArchive::load);      //定义存档对象,加载文件
 int idata;           //定义整型变量
 char chdata;          //定义字符变量
 double fdata;           //定义实型变量
 CString strInfo;          //定义字符串变量
 ar>>idata>>chdata>>fdata>>strInfo;      //读取数据
 CString strText;          //定义字符变量
 strText.Format("%d,%c,%f,%s",idata,chdata,fdata,strInfo);  //格式化字符串
 MessageBox(strText,"提示");       //弹出对话框
}
(4)运行程序,效果如图1所示。
 
图1  CArchive类读写文件
本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页