文章目錄
我們儲存一些常值內容可以很簡單的儲存成一個檔案就行了.但如果要把一些類對象資訊儲存起來,然後讀取時用那些資訊初始化一個類對象就比較複雜了.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();
}