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