使用 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
函式。 您可以呼叫 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
}
}
上述程式碼範本與針對檔函式所 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
CTime
和 CTimeSpan
Double
DWORD
Float
Int
LONG
POINT
和 CPoint
RECT
和 CRect
SIZE
和 CSize
WORD
注意
透過封存儲存和載入 CObject
需要額外的考慮。 如需詳細資訊,請參閱 透過封存 儲存和載入 CObjects。
CArchive
<<
和 >>
運算子一律會傳回物件的參考 CArchive
,這是第一個運算元。 這可讓您鏈結運算子,如下所示:
archive << m_strName << m_wAge;