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


Контейнеры: составные файлы

В этой статье описываются компоненты и реализация составных файлов, а также преимущества и недостатки использования составных файлов в приложениях OLE.

Составные файлы являются неотъемлемой частью OLE. Они используются для упрощения передачи данных и хранения документов OLE. Составные файлы — это реализация модели активного структурированного хранилища. Согласованные интерфейсы существуют, поддерживающие сериализацию в хранилище, поток или объект файла. Составные файлы поддерживаются в библиотеке классов Microsoft Foundation классами COleStreamFile и COleDocument.

Замечание

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

Компоненты составного файла

Реализация OLE составных файлов использует три типа объектов: потоковые объекты, объекты хранилища и ILockBytes объекты. Эти объекты похожи на компоненты стандартной файловой системы следующим образом:

  • Объекты потока, такие как файлы, хранят данные любого типа.

  • Объекты хранилища, такие как каталоги, могут содержать другие объекты хранилища и потоковой передачи.

  • LockBytes объекты представляют интерфейс между объектами хранилища и физическим оборудованием. Они определяют, как фактические байты записываются на любое устройство LockBytes хранения, к чему обращается объект, например жесткий диск или область глобальной памяти. Дополнительные сведения об LockBytes объектах и интерфейсе ILockBytes см. в справочнике программиста OLE.

Преимущества и недостатки составных файлов

Составные файлы предоставляют преимущества, недоступные в более ранних методах хранения файлов. К ним относятся:

  • Добавочный доступ к файлам.

  • Режимы доступа к файлам.

  • Стандартизация структуры файлов.

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

Добавочный доступ к файлам

Добавочный доступ к файлам — это автоматическое преимущество использования составных файлов. Так как составной файл можно просматривать как "файловую систему в файле", отдельные типы объектов, такие как поток или хранилище, могут быть доступны без необходимости загружать весь файл. Это может значительно уменьшить время, необходимое приложению для доступа к новым объектам для редактирования пользователем. Добавочное обновление, основанное на той же концепции, предлагает аналогичные преимущества. Вместо сохранения всего файла только для сохранения изменений, внесенных в один объект, OLE сохраняет только объект потока или хранилища, редактируемый пользователем.

Режимы доступа к файлам

Возможность определить, когда изменения объектов в составном файле фиксируются на диске, является еще одним преимуществом использования составных файлов. Режим доступа к файлам ( транзакциям или прямым) определяет, когда изменения фиксируются.

  • В режиме transacted используется двухфазная операция фиксации для внесения изменений в объекты в составном файле, тем самым сохраняя как старые, так и новые копии документа, пока пользователь не решит сохранить или отменить изменения.

  • Прямой режим включает изменения в документ по мере их внесения без возможности их отмены.

Дополнительные сведения о режимах доступа см. в справочнике программиста OLE.

Стандартизация

Стандартизованная структура составных файлов позволяет различным приложениям OLE просматривать составные файлы, созданные приложением OLE без знаний о приложении, которое фактически создал файл.

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

Из-за сложности составной структуры хранилища файлов и возможности записи данных поэтапно файлы с этим форматом, как правило, больше, чем другие файлы, использующие неструктурированное или «плоское» хранилище. Если приложение часто загружает и сохраняет файлы, использование составных файлов может привести к увеличению размера файла гораздо быстрее, чем некомпундные файлы. Так как составные файлы могут получить большие объемы, время доступа к файлам, хранящимся и загруженным с дисков floppy, также может быть затронуто, что приводит к замедлению доступа к файлам.

Другая проблема, влияющая на производительность, — фрагментация составных файлов. Размер составного файла определяется разницей между секторами первого и последнего дисков, используемых файлом. Фрагментированные файлы могут содержать множество областей свободного пространства, которые не содержат данные, но учитываются при вычислении размера. В течение времени существования составного файла эти области создаются путем вставки или удаления объектов хранилища.

Использование формата составных файлов для данных

После успешного создания приложения с классом документов, производным от COleDocument, убедитесь, что основной конструктор документов вызывает EnableCompoundFile. Когда мастер создания приложений создает приложения-контейнеры OLE, этот вызов добавляется автоматически.

В справочнике программиста OLE см. статью IStream, IStorage и ILockBytes.

См. также

Контейнеры
Контейнеры: проблемы User-Interface
Класс COleStreamFile
Класс COleDocument