荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Second (石开), 信区: Program
标  题: 3.5 利用序列化进行文件读写
发信站: 荔园晨风BBS站 (Wed May 30 01:22:09 2001), 转信

3.5 利用序列化进行文件读写

在很多应用中我们需要对数据进行保存,或是从介质上读取数据,这就涉及到文件的操
作。我们可以利用各种文件存取方法完成这些工作,但MFC中也提供了一种读写文件的简
单方法——“序列化”。序列化机制通过更高层次的接口功能向开发者提供了更利于使
用和透明于字节流的文件操纵方法,举一个例来讲你可以将一个字串写入文件而不需要
理会具体长度,读出时也是一样。你甚至可以对字符串数组进行操作。在MFC提供的可自
动分配内存的类的支持下你可以更轻松的读/写数据。你也可以根据需要编写你自己的具
有序列化功能的类。

序列化在最低的层次上应该被需要序列化的类支持,也就是说如果你需要对一个类进行
序列化,那么这个类必须支持序列化。当通过序列化进行文件读写时你只需要该类的序

列化函数就可以了。
怎样使类具有序列化功能呢?你需要以下的工作:
该类从CObject派生。
在类声明中包括DECLARE_SERIAL宏定义。
提供一个缺省的构造函数。
在类中实现Serialze函数
使用IMPLEMENT_SERIAL指明类名和版本号
下面的代码建立了一个简单身份证记录的类,同时也能够支持序列化。
in H
struct strPID
{
 char szName[10];
 char szID[16];
 struct strPID* pNext;
};
class CAllPID : public CObject
{
public:
 DECLARE_SERIAL(CAllPID)
 CAllPID();
 ~CAllPID();
public:// 序列化相关
 struct strPID* pHead;
 //其他的成员函数
 void Serialize(CArchive& ar);
};
in CPP
IMPLEMENT_SERIAL(CAllPID,CObject,1) // version is 1,版本用于读数据时的检测
void CAllPID::Serialize(CArchive& ar)
{
 int iTotal;
 if(ar.IsStoring())
 {//保存数据
  iTotal=GetTotalID();//得到链表中的记录数量
  arr<26;i++)
    ar<<&(((BYTE*)pItem)+i);//写一个strPID中所有的数据
  }
 }
 else
 {//读数据
  ar>>iTotal;
  for(int i=0;i26;j++)
    ar>>*(((BYTE*)pID)+j);//读一个strPID中所有的数据
   //修改链表
  }
 }
}
当然上面的代码很不完整,但已经可以说明问题。这样CAllPID就是一个可以支持序列化
的类,并且可以根据记录的数量动态分配内存。在序列化中我们使用了CArchive类,该
类用于在序列化时提供读写支持,它重载了<<和>>运算符号,并且提供Read和Write函数
对数据进行读写。
下面看看如何在文档中使用序列化功能,你只需要修改文档类的Serialize(CArchive&
ar)函数,并调用各个进行序列化的类的Serial进行数据读写就可以了。当然你也可以在
文档类的内部进行数据读写,下面的代码利用序列化功能读写数据:
class CYourDoc : public CDocument
{
 void Serialize(CArchive& ar);
 CString m_szDesc;
 CAllPID m_allPID;
......
}
void CYourDoc::Serialize(CArchive& ar)
{
 if (ar.IsStoring())
 {//由于CString对CArchive定义了<<和>>操作符号,所以可以直接利用>>和<<
  ar<>m_szDesc;
 }
 m_allPID.Serialize(ar);//调用数据类的序列化函数
}

--
                            既然热爱生命
                            那么,
                            一切都在意料之中。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.28.190]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店