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