將物件狀態寫入/從持久化儲存媒體(如磁碟檔案)讀取的過程。
Serialize(CArchive*) 方法的類別實例。CFile* pFile = new CFile();
ASSERT(pFile != NULL);
if (!pFile->Open("foo.dat", CFile::modeReadWrite | CFile::shareExclusive)) {
// 錯誤處理
return;
}
bool bReading = false; // true=讀, false=寫
CArchive* pArchive = NULL;
try {
pFile->SeekToBegin();
UINT uMode = bReading ? CArchive::load : CArchive::store;
pArchive = new CArchive(pFile, uMode);
ASSERT(pArchive != NULL);
} catch (CException* e) {
// 錯誤處理
return;
}
int CFoo::Serialize(CArchive* pArchive) {
int nStatus = SUCCESS;
ASSERT(pArchive != NULL);
try {
if (pArchive->IsStoring()) {
*pArchive << m_strName << m_nId; // 寫入
} else {
*pArchive >> m_strName >> m_nId; // 讀取
}
} catch (CException* e) {
nStatus = ERROR;
}
return nStatus;
}
CArchive 重載 <</>> 支援基本型別(int, float, DWORD)與 MFC 類別(CString)自動序列化。
pArchive->Close();
delete pArchive;
pFile->Close();
delete pFile;
Serialize() 方法處理讀/寫,透過 IsStoring() 區分。Serialize() 不需知道檔案開啟模式,只操作 CArchive。CObject,MFC 序列化機制獨立於 CObject::Serialize。