使用 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 |
RECT 和 CRect |
Double |
LONG |
CTime 和 CTimeSpan |
Int |
COleCurrency |
COleVariant |
COleDateTime |
COleDateTimeSpan |
|
注意事項 |
---|
儲存及載入CObjects 透過保存需要額外的考量。如需詳細資訊,請參閱 Storing,並透過保存的載入 CObjects。 |
CArchive << 和 >> 運算子一律會傳回一個參照給CArchive物件,也就是第一個運算元。 這可讓您鏈結這些運算子,如以下圖解所示:
archive << m_strName << m_wAge;