共用方式為


使用 CArchive << 和 >> 運算子

CArchive提供 << 和 >> 用於寫入和讀取簡單資料類型的運算子,以及CObjects 進出的檔案。

若要透過保存檔中儲存物件

  • 下列範例顯示如何透過保存檔中儲存物件:

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

若要從檔案的預存值載入物件

  • 下列範例顯示如何從檔案的預存值載入物件:

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

通常,則對於儲存及載入資料檔,以透過保存在來回Serialize函式的CObject-衍生類別,您必須宣告具有 DECLARE_SERIALIZE 巨集。 參考CArchive物件傳遞至您Serialize函式。 您呼叫IsLoading函式的CArchive物件以判斷是否Serialize檔案中的資料載入或儲存檔案的資料已經呼叫函式。

Serialize函式的可序列化CObject-在衍生的類別通常都採用下列格式:

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

上述程式碼範本則完全相同,即 AppWizard 會為建立單一Serialize文件的函式 (類別衍生自 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

CPoint

DWORD

BYTE

RECTCRect

Double

LONG

CTimeCTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

注意事項注意事項

儲存及載入CObjects 透過保存需要額外的考量。如需詳細資訊,請參閱 Storing,並透過保存的載入 CObjects

CArchive <<>> 運算子一律會傳回一個參照給CArchive物件,也就是第一個運算元。 這可讓您鏈結這些運算子,如以下圖解所示:

archive << m_strName << m_wAge;

請參閱

概念

序列化: 序列化物件