< meta http-equiv="description" content="我们保存一些文本内容可以很简单的保存成一个文件就行了。但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了。MFC提供了一个叫序列化的功能。可以把一个对象信息转化成二进制文件(或者xml文件)保存起来。"/>

MFC序列化(serial)简单例子

[来源] 达内    [编辑] 达内   [时间]2013-03-14

我们保存一些文本内容可以很简单的保存成一个文件就行了。但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了。MFC提供了一个叫序列化的功能。可以把一个对象信息转化成二进制文件(或者xml文件)保存起来。

  我们保存一些文本内容可以很简单的保存成一个文件就行了。但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了。MFC提供了一个叫序列化的功能。可以把一个对象信息转化成二进制文件(或者xml文件)保存起来。

  下面举一个简单的例子,假如有类CArwen,实例化一个对象,然后序列化该对象。最后反序列化,把保存的值再读出来初始化给一个对象。

  1.先定义类CArwen

  //头文件

  class CArwen: public CObject

  {

  DECLARE_SERIAL(CArwen)

  public:

  virtual void Serialize(CArchive& ar);

  int age;

  CString name;

  };

  //cpp文件

  IMPLEMENT_SERIAL(CArwen,CObject,1) //1是版本号,可以随便指定一个数值

  void CArwen::Serialize(CArchive& ar)

  {

  if(ar.IsStoring()){ //序列化,保存信息。CArchive::store与此对应

  ar《age;

  ar《name;

  }else //反序列化,读取信息

  {

  ar》age;

  ar》name;

  }

  }

  2.测试程序

  #include "CArwen.h"

  CString filePath = _T("D:\\app\\Arwen.dat") ; //序列化把对象信息保存在该文件中

  void TestSerializeArwen() //保存信息

  {

  CArwen arwen;

  arwen.age = 24;

  arwen.name = _T("weiwenhp); //如果没用unicode,就不用_T

  CFile fi;

  fi.Open(filePath , CFile::modeCreate|CFile::modeWrite); //如果文件不存在则创建一个,否则只是往文件写数据

  CArchive ar(&fi, CArchive::store);

  awen.Serialize(ar); //序列化对象

  ar.Close();

  fi.Close();

  }

  void TestReadSerilizedArwn() //读取信息

  {

  CArwen arwen;

  CFile fi;

  fi.Open(filePath , CFile::Read);

  CArchive ar(&fi, CArchive::load);

  awen.Serialize(ar); //反序列化对象

  ar.Close();

  fi.Close();

  }

资源下载