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

Замечание

Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.

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;

См. также

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