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();