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


Использование операторов 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. Выполняется вызов функции 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 через архив требуют дополнительного вопроса.Дополнительные сведения см. в разделе Храните и загрузки CObjects через архив.

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

archive << m_strName << m_wAge;

См. также

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

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