CArwen.h文件
#pragma once
// CArwen 命令目标
class CArwen : public CObject
{
DECLARE_SERIAL(CArwen)
public:
int age;
CString name;
CArwen();
CArwen(int testAge,CString testName){
age = testAge;
name = testName;
}
virtual void Serialize(CArchive& ar);
virtual ~CArwen();
};
--------------------------
// Arwen.cpp : 实现文件
//
#include "stdafx.h"
#include "first.h"
#include "Arwen.h"
// CArwen
CArwen::CArwen()
{
}
CArwen::~CArwen()
{
}
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;
}
}
-----------------------
序列化主流程
void CfirstDlg::TestSerializeArwen(void)
{
//return;
CString filePath = _T("e:\\app\\Arwen.dat") ; //序列化把对象信息保存在该文件中
CArwen arwen1(8,_T("aa"));
CArwen arwen2(37,_T("张三"));
CFile fi;
fi.Open(filePath , CFile::modeCreate|CFile::modeWrite); //如果文件不存在则创建一个,否则只是往文件写数据 www.2cto.com
CArchive ar(&fi, CArchive::store);
arwen1.Serialize(ar); //序列化对象
arwen2.Serialize(ar); //序列化对象
ar.Close();
fi.Close();
}
--------------------------
反序列化主流程
void CfirstDlg::OnBnClickedButton1()
{
//CArwen arwen;
CString filePath1=_T("e:\\app\\Arwen.dat");//序列化把对象信息保存在该文件中
CFile fi;
CString temp;
if(fi.Open(filePath1, CFile::modeRead) == FALSE)
{
MessageBox(_T("dd"));
return;
}
CArchive ar(&fi, CArchive::load);
int nCount = 2;
CArwen* arwen = new CArwen[2];
arwen[0].Serialize(ar); //反序列化对象
arwen[1].Serialize(ar); //反序列化对象
ar.Close();
fi.Close();
MessageBox(arwen[1].name);
}
序列化要点:
1、序列化和反序列化写法保持一致,比如:都是用 Serialize,或者都是用<< >>
2、研究了两天,感觉还可以,分享给大家