使用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
}
}
上面的代码模板正确是一 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 通过存档需要额外的注意事项。有关更多信息,请参见 存储和加载的 CObjects 通过存档。 |
CArchive << 和 >> 运算符总是返回对 CArchive 对象,是第一个操作数。这使您能够将运算符,如下所示:
archive << m_strName << m_wAge;