Использование 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;