使用 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;