共用方式為


使用 CArchive <<>> 運算子

CArchive 提供 << 和 >> 運算子,以便寫入和讀取單一資料型別,以及 CObject 從檔案來回寫入和讀取。

透過封存將物件儲存在檔案中

  1. 下列範例示範如何透過封存將物件儲存在檔案中:

    CArchive ar(&theFile, CArchive::store);
    WORD wEmployeeID = 78;
    ar << wEmployeeID;
    

從先前儲存在檔案中的值載入物件

  1. 下列範例示範如何從先前儲存在檔案中的值載入 物件:

    CArchive ar(&theFile, CArchive::load);
    WORD wEmployeeID;
    ar >> wEmployeeID;
    

通常,您會透過衍生類別函 CObject 式中的 Serialize 封存來儲存和載入檔案中的資料,您必須使用 DECLARE_SERIALIZE 宏宣告。 物件的參考 CArchive 會傳遞至您的 Serialize 函式。 您可以呼叫 IsLoading CArchive 物件的 函式,以判斷 Serialize 是否已呼叫 函式以從檔案載入資料,或將資料儲存至檔案。

SerializeCObject 序列化衍生類別的函式通常具有下列形式:

void CSerializableObj::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
   {
      // TODO:  add storing code here
   }
   else
   {
      // TODO:  add storing code here
   }
}

上述程式碼範本與針對檔函式所 Serialize 建立的 AppWizard 完全相同(衍生自 CDocument 的類別)。 此程式碼範本可協助您撰寫更容易檢閱的程式碼,因為儲存程式碼和載入程式碼應該一律是平行的,如下列範例所示:

void CEmployee::Serialize(CArchive &archive)
{
   // call base class function first
   // base class is CObject in this case
   CObject::Serialize(archive);

   // now do the stuff for our specific class
   if (archive.IsStoring())
      archive << m_strName << m_wAge;
   else
      archive >> m_strName >> m_wAge;
}

程式庫會將 << 的 和 >> 運算子 CArchive 定義為第一個運算元,並將下列資料類型和類別類型定義為第二個運算元:

BYTE
CObject*
COleCurrency
COleDateTime
COleDateTimeSpan

COleVariant
CString
CTimeCTimeSpan
Double

DWORD
Float
Int
LONG

POINTCPoint
RECTCRect
SIZECSize
WORD

注意

透過封存儲存和載入 CObject 需要額外的考慮。 如需詳細資訊,請參閱 透過封存 儲存和載入 CObjects。

CArchive <<>> 運算子一律會傳回物件的參考 CArchive ,這是第一個運算元。 這可讓您鏈結運算子,如下所示:

archive << m_strName << m_wAge;

另請參閱

序列化:序列化物件