Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Func.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.58 Mб
Скачать

Классы cArchive

Класс CArchive позволяет сохранять на диске достаточно сложные объекты, а также загружать их в память по мере необходимости. Хранение объектов производится в файлах с последовательным доступом. Данный тип файла можно представить себе как двоичный поток данных. Подобно потокам, используемым в операциях ввода-вывода, архив использует буферизированную запись и чтение данных в память и из памяти. Поток ввода-вывода обрабатывает последовательности символов ASCII, но архив обрабатывает двоичные данные объектов в более эффективном формате, не использующем избыточности.

Прежде, чем использовать объект класса архива, необходимо создать соответствующий ему объект класса CFile. При этом необходимо удостовериться, что в этих объектах соответствуют атрибуты доступа к данным. Одному объекту класса CFile может соответствовать не более одного активного объекта класса CArchive.

При создании объекта класса CArchive он присоединяется к объекту класса CFile (или производного от него класса), соответствующего открытому файлу. При этом следует, также определить режим работы с архивом: будет ли он использоваться для загрузки или сохранения данных. Объект класса CArchive может работать не только с простейшими типами данных, но также и объектами классов, производных от класса CObject, позволяющих сохранять свои данные в последовательном формате. Класс, допускающий сохранение своих данных в последовательном формате, обычно имеет функцию Serialize, а при его описании и реализации используются макросы DECLARE_SERIAL и IMPLEMENT_SERIAL.

Перегруженные операторы чтения данных из архива (>>) и записи данных в архив (<<) обеспечивают удобные программный интерфейс работы с архивом. Аргументом данных операторов могут быть как переменные простейших типов, тик и объекты классов, производных от класса CObject.

Описание данного класса содержится в файле заголовка afx.h.

CArchive::operator >>

friend CArchive& operator >>( CArchive& ar, CObject *& pOb ); throw( CArchiveException, CFileException, CMemoryException );

friend CArchive& operator >>( CArchive& ar, const CObject *& pOb ); throw( CArchiveException, CFileException, CMemoryException );

CArchive& operator >>( BYTE& by ); throw( CArchiveException, CFileException );

CArchive& operator >>( WORD& w ); throw( CArchiveException, CFileException );

CArchive& operator >>( int& i ); throw( CArchiveException, CFileException );

CArchive& operator >>( LONG& l ); throw( CArchiveException, CFileException );

CArchive& operator >>( DWORD& dw ); throw( CArchiveException, CFileException );

CArchive& operator >>( float& f ); throw( CArchiveException, CFileException );

CArchive& operator >>( double& d ); throw( CArchiveException, CFileException );

Возвращаемое значение

Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов.

Примечание

Читает указанный объект или переменную простейшего типа из архива.

Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищённую функцию ReadObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса.

CArchive::operator <<

friend CArchive& operator <<( CArchive& ar, const CObject* pOb ); throw( CArchiveException, CFileException );

CArchive& operator <<( BYTE by ); throw( CArchiveException, CFileException );

CArchive& operator <<( WORD w ); throw( CArchiveException, CFileException );

CArchive& operator <<( int i ); throw( CArchiveException, CFileException );

CArchive& operator <<( LONG l ); throw( CArchiveException, CFileException );

CArchive& operator <<( DWORD dw ); throw( CArchiveException, CFileException );

CArchive& operator <<( float f ); throw( CArchiveException, CFileException );

CArchive& operator <<( double d ); throw( CArchiveException, CFileException );

Возвращаемое значение

Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов.

Примечание

Записывает указанный объект или переменную простейшего типа в архив.

Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищённую функцию WriteObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса.

CArchive::Flush

void Flush( ); throw( CFileException );

Примечание

Переписывает данные, хранящиеся в буфере данного архива, в файл. Вызов данной функции гарантирует, что все данные, переданные в архив, будут записаны в файл. Для завершения процесса записи информации на диск необходимо вызвать функцию CFile::Close.

CArchive::GetFile

CFile* GetFile( ) const;

Возвращаемое значение

Указатель на объект класса CFile, связанный с данным архивом.

Примечание

Позволяет получить указатель на объект класса CFile, связанный с данным архивом. Перед использованием данной функции необходимо очистить буфер данного архива с использованием функции Flush.

CArchive::IsLoading

BOOL IsLoading( ) const;

Возвращаемое значение

Ненулевое, если архив в настоящее время используется для чтения из него информации, и нулевое в противном случае.

Примечание

Определяет режим использования архива. Данная функция используется в функции Serialize классов, поддерживающих работу с архивом.

CArchive::IsStoring

BOOL IsStoring( ) const;

Возвращаемое значение

Ненулевое, если архив в настоящее время используется для записи в него информации, и нулевое в противном случае.

Примечание

Определяет режим использования архива. Данная функция используется в функции Serialize классов, поддерживающих работу с архивом. Если функция IsStoring возвращает ненулевое значение, то функция IsLoading возвращает нулевое значение. И наоборот.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]