首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MFC 序列化入門(一):基本流程與三大要素

     編輯:關於C語言

序列化定義

將物件狀態寫入/從持久化儲存媒體(如磁碟檔案)讀取的過程。

三大必要元素

  1. CFile 物件:描述資料檔案(開啟模式、路徑)。
  2. CArchive 物件:提供序列化上下文(讀/寫模式、緩衝、型別處理)。
  3. 可序列化物件:實作 Serialize(CArchive*) 方法的類別實例。

四步驟完整流程

步驟 1:開啟檔案

CFile* pFile = new CFile();
ASSERT(pFile != NULL);
if (!pFile->Open("foo.dat", CFile::modeReadWrite | CFile::shareExclusive)) {
    // 錯誤處理
    return;
}

步驟 2:建立 CArchive 關聯檔案

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;
}

步驟 3:序列化物件

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)自動序列化。

步驟 4:清理資源

pArchive->Close();
delete pArchive;
pFile->Close();
delete pFile;

關鍵特性

  • 同一 Serialize() 方法處理讀/寫,透過 IsStoring() 區分。
  • Serialize() 不需知道檔案開啟模式,只操作 CArchive。
  • 物件無需繼承 CObject,MFC 序列化機制獨立於 CObject::Serialize。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved