我们保存一些文本内容可以很简单的保存成一个文件就行了。但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了。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();
}