Поделиться через


Использование CArchive << и >> операторов

CArchive предоставляет << и >> операторы для записи и чтения простых типов данных, а также CObjectдля файлов и из нее.

Хранение объекта в файле с помощью архива

  1. В следующем примере показано, как сохранить объект в файле с помощью архива:

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

Загрузка объекта из значения, ранее хранящегося в файле

  1. В следующем примере показано, как загрузить объект из значения, ранее хранящегося в файле:

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

Обычно вы храните и загружаете данные в файл с помощью архива в Serialize функциях производных CObjectклассов, которые должны быть объявлены с помощью макроса 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
   }
}

Приведенный выше шаблон кода точно совпадает с тем, что приложение 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 первого операнда и следующих типов данных и классов в качестве второго операнда:

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;

См. также

Сериализация. Сериализация объекта