程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 將對象保存至文件——CArchive,

將對象保存至文件——CArchive,

編輯:C++入門知識

將對象保存至文件——CArchive,


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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved