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

RECTCRect

Double

LONG

CTimeCTimeSpan

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

说明说明

存储和加载 CObjects 通过存档需要额外的注意事项。有关更多信息,请参见 存储和加载的 CObjects 通过存档

CArchive <<>> 运算符总是返回对 CArchive 对象,是第一个操作数。这使您能够将运算符,如下所示:

archive << m_strName << m_wAge;

请参见

概念

序列化:序列化对象