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


Обход механизма сериализации

Как вы уже видели, платформа предоставляет стандартный способ чтения и записи данных в файлы и из них. Сериализация с помощью архивного объекта соответствует потребностям большого количества приложений. Такое приложение полностью считывает файл в память, позволяет пользователю обновлять файл, а затем снова записывать обновленную версию на диск.

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

В таких случаях можно переопределить функцию Serialize другим способом для действий с файлами мультимедиа с помощью объекта CFile, а не объекта CArchive.

Вы можете использовать Openфункции класса , , CloseReadWriteи Seek члены классаCFile, чтобы открыть файл, переместить указатель файла (искать) в определенную точку в файле, прочитать запись (указанное число байтов) на этом этапе, позволить пользователю обновить запись, а затем снова искать ту же точку и записать запись обратно в файл. Платформа откроет файл для вас, и вы можете использовать GetFile функцию-член класса CArchive для получения указателя на CFile объект. Для более сложного и гибкого использования можно переопределить функции-члены OnOpenDocument и OnSaveDocument классаCWinApp. Дополнительные сведения см. в разделе "Класс CFile" в справочнике по MFC.

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

См. также

Использование документов