MFC - 序列化



序列化是指將物件寫入或讀取到永續性儲存介質(如磁碟檔案)的過程。序列化非常適合需要在程式執行期間或之後維護結構化資料(例如 C++ 類或結構)狀態的情況。

在執行檔案處理時,值通常是原始型別(char、short、int、float 或 double)。同樣,我們可以一次一個地單獨儲存許多值。此技術不包括從(作為…的變數)類建立的物件。

MFC 庫對序列化具有高度的支援。它從 CObject 類開始,它是大多數 MFC 類的祖先,該類配備了 Serialize() 成員函式。

讓我們透過建立一個新的 MFC 專案來了解一個簡單的示例。

步驟 1 - 刪除 TODO 行並設計您的對話方塊,如下面的快照所示。

Remove TODO Line

步驟 2 - 為所有編輯控制元件新增值變數。對於提到的員工 ID 和年齡,值型別為整數,如下面的快照所示。

Serialization Add Var

步驟 3 - 為這兩個按鈕新增事件處理程式。

步驟 4 - 現在讓我們新增一個簡單的 Employee 類,我們需要對其進行序列化。這是標頭檔案中 Employee 類的宣告。

class CEmployee : public CObject {
   public:
      int empID;
      CString empName;
      int age;
      CEmployee(void);
      ~CEmployee(void);
   private:

   public:
      void Serialize(CArchive& ar);
      DECLARE_SERIAL(CEmployee);
};

步驟 5 - 這是原始檔 (*.cpp) 中 Employee 類的定義。

IMPLEMENT_SERIAL(CEmployee, CObject, 0)
CEmployee::CEmployee(void) {

}

CEmployee::~CEmployee(void) {

}

void CEmployee::Serialize(CArchive& ar) {
   CObject::Serialize(ar);

   if (ar.IsStoring())
      ar << empID << empName << age;
   else
      ar >> empID >> empName >> age;
}

步驟 6 - 這是“儲存”按鈕事件處理程式的實現。

void CMFCSerializationDlg::OnBnClickedButtonSave() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);
   CEmployee employee;
   CFile file;
   file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite);
   CArchive ar(&file, CArchive::store);
   employee.empID = m_id;
   employee.empName = m_strName;
   employee.age = m_age;
   employee.Serialize(ar);
   ar.Close();
}

步驟 7 - 這是“開啟”按鈕事件處理程式的實現。

void CMFCSerializationDlg::OnBnClickedButtonOpen() {
   // TODO: Add your control notification handler code here
   UpdateData(TRUE);

   CFile file;

   file.Open(L"EmployeeInfo.hse", CFile::modeRead);
   CArchive ar(&file, CArchive::load);
   CEmployee employee;

   employee.Serialize(ar);

   m_id = employee.empID;
   m_strName = employee.empName;
   m_age = employee.age;
   ar.Close();
   file.Close();

   UpdateData(FALSE);
}

步驟 8 - 編譯並執行上述程式碼後,您將看到以下輸出。

Serialization Result

步驟 9 - 在所有欄位中輸入資訊,然後單擊“儲存”並關閉此程式。

Serialization Insert Info

步驟 10 - 它將儲存資料。再次執行應用程式並單擊“開啟”。它將載入員工資訊。

Serialization Save Info
廣告