CArchive允許以一個二進制的形式保存一個對象的復雜網絡,也可以再次裝載它們,在內存中重新構造,這一過程叫作串行化/序列化(Serialization),簡單的說,CArchive與CFile配合使用可以以二進制讀取/保存數據到文件。
創建一個CArchive對象之前,你必須創建並成功打開一個CFile對象。另外,必須確信歸檔文件的裝入(load)/存儲(store)與文件的打開模式是兼容的,每一個文件只限於一個活動歸檔文件。
CArchive 對象的壽命只限於將對象寫入文件或從文件讀取對象的一次傳遞,也就是說,即使你使用了讀寫模式打開CFile對象,你也只能在load(store)結束並Close了CArchive對象後,才能重新對同一個CFile對象使用CArchive對象進行store(load)。
CArchive基本用法,其中 m_NetList 為一CListCtrl對象,在這裡並沒有重載Serialize:
存:
CString szFileName = _T("c:\\1.dat");
CFile file;
if (file.Open(szFileName, CFile::modeCreate | CFile::modeWrite)) {
CArchive ar(&file, CArchive::store);
int nCount;
nCount = m_NetList.GetItemCount();
ar << nCount;
for (int nID = 0; nID < nCount; nID++) {
ar << m_NetList.GetItemText(nID, 1);
ar << m_NetList.GetItemText(nID, 2);
ar << m_NetList.GetItemText(nID, 6);
}
ar.Close();
}
file.Close();
取:
CString szFileName = _T("c:\\1.dat");
CFile file;
if (file.Open(szFileName , CFile::modeRead)) {
CArchive ar(&file, CArchive::load);
int nCount, nID;
CString tempS;
m_NetList.DeleteAllItems();
ar >> nCount;
for (int i = 0; i < nCount; i++) {
nID = m_NetList.InsertItem(i, _T(""));
ar >> tempS;
m_NetList.SetItemText(nID, 1, tempS);
ar >> tempS;
m_NetList.SetItemText(nID, 2, tempS);
ar >> tempS;
m_NetList.SetItemText(nID, 6, tempS);
}
ar.Close();
}
}
file.Close();