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


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

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

Хранить объект в файле в архив

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

    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.Вызовите функцию 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 как первый операнд и следующие типы данных и типы классов в качестве второго операнда.

CObject*

РАЗМЕР и CSize

float

WORD

CString

POINT и CPoint

DWORD

BYTE

RECT и CRect.

Double

LONG

CTime и CTimeSpan.

Int

COleCurrency

COleVariant

COleDateTime

COleDateTimeSpan

 

ПримечаниеПримечание

Сохранение и загрузка CObject s через требуют дополнительного рассмотрения. архивДополнительные сведения см. в разделе И при загрузке CObjects в архив.

Операторы CArchive << и >> всегда возвращают ссылку на объект CArchive, первый операнд.Это позволяет привязан операторы, как показано ниже:

archive << m_strName << m_wAge;

См. также

Основные понятия

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