共用方式為


使用 CArchive << 和 >> 運算子

CArchive 提供 << 和 >> 運算子撰寫和讀取簡單資料型別以及 CObject來回檔案。

儲存物件在檔案中的封存

  • 下列範例會在檔案顯示如何儲存物件透過封存:

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

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

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

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

通常,您將檔案儲存和載入傳遞資料保存在 CObject的 Serialize 函式衍生類別,您必須宣告與 DECLARE_SERIALIZE 巨集。 對 CArchive 物件的參考傳遞至 Serialize 函式。 您呼叫 CArchive 物件的 IsLoading 函式來判斷 Serialize 函式是否呼叫從檔案載入資料或將資料儲存至檔案。

可序列化之 CObject的 Serialize 函式衍生類別通常會具有下列格式:

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 的運算子做為第一個運算元和下列資料型別和類別型別做為第二個運算元:

CObject*

大小和 CSize

float

WORD

CString

POINTCPoint

DWORD

BYTE

RECTCRect

Double

LONG

CTimeCTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

注意事項注意事項

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

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

archive << m_strName << m_wAge;

請參閱

概念

序列化:序列化物件