Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Использование операторов CArchive
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
CArchive предоставляет << и >> операторы для записи и чтения простых типов данных, а также CObject для файлов и из файла.
Хранение объекта в файле с помощью архива
В следующем примере показано, как сохранить объект в файле с помощью архива:
CArchive ar(&theFile, CArchive::store); WORD wEmployeeID = 78; ar << wEmployeeID;
Загрузка объекта из значения, ранее хранящегося в файле
В следующем примере показано, как загрузить объект из значения, ранее хранящегося в файле:
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;