使用 CArchive <<>> 运算符

CArchive 提供 << 和 >> 运算符用于写入和读取简单数据类型 CObject以及从文件中写入和读取数据。

通过存档将对象存储在文件中

  1. 以下示例演示如何通过存档将对象存储在文件中:

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

从以前存储在文件中的值加载对象

  1. 以下示例演示如何从以前存储在文件中的值加载对象:

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

通常,可以通过派生类函数CObject中的Serialize存档将数据存储和加载到文件中,必须使用DECLARE_SERIALIZE宏声明该文件。 对 CArchive 对象的引用将传递给函数 Serialize 。 调用 IsLoading 对象的函数 CArchive 以确定 Serialize 是否已调用该函数以从文件加载数据或将数据存储到文件。

SerializeCObject序列化的派生类的函数通常具有以下形式:

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
CTimeCTimeSpan
Double

DWORD
Float
Int
LONG

POINTCPoint
RECTCRect
SIZECSize
WORD

注释

通过存档存储和加载 CObject需要额外考虑。 有关详细信息,请参阅 通过存档存储和加载 CObjects

CArchive<<>>运算符始终返回对CArchive对象(即第一个作数)的引用。 这使你可以链接运算符,如下所示:

archive << m_strName << m_wAge;

另请参阅

序列化:序列化对象