Немного теории. Составной файл (структурированное хранилище) - файл содержащий в себе некое подобие файловой системы. Сам головной файл является обычным файлом, имеет все свойства файла (т.е. копируется, удаляется, переименовывается и т.п.). Внутри есть каталоги называемые хранилищами, есть файлы называемые потоками. К сведению файлы .doc (MSWord), .xls (MSExcel) и др. являются составными файлами.
Работу с такой разновидностью файлов обеспечивает интерфейсы IStorage, IStream. В таких файлах можно и удобно хранить любую информацию, систематизировать ее по группам. Доступ к данным такого хранилища осуществляется избрано, не загружая весь файл в память.
Интерфейс IStorage поддерживает создание и управление объектами структурированного хранилища. Структурированное хранилище позволяет иерархически хранить информацию в одном файле и часто называется «файловой системой в файле». Элементами структурированного хранилища являются хранилища и потоки. Хранилища подобны каталогам, а потоки аналогичны файлам. Внутри структурированного хранилища есть первичный объект, который может содержать субхранилища (подкаталоги), возможно, вложенные, и потоки. Хранилища предоставляют структуру объекта, а потоки содержат данные, которыми манипулируют через интерфейс IStream.
Интерфейс IStorage содержит методы для создания и управления корневым объектом хранения, дочерними объектами хранения и потоковыми объектами. Эти методы могут создавать, открывать, перечислять, перемещать, копировать, переименовывать или удалять элементы в объекте хранения. Интерфейс IStorage предоставляет методы для фиксации изменений и возврата к последней зафиксированной версии. Потоки могут открыться в режиме только для чтения или в режиме чтения / записи.
// создаёт и одновременно открывает новый объект хранения
HRESULT CreateStorage
(
const OLECHAR *pwcsName,
DWORD grfMode,
DWORD reserved1,
DWORD reserved2,
// получаем указатель на созданное хранилище
IStorage **ppstg
);
// открывает существующий объект с определенным режимом доступа
IStorage::OpenStorage
// создает и открывает новый поток в данном хранилище
IStorage::CreateStream
// открывает поток в данном хранилище с определенным режимом доступа
IStorage::OpenStream
Интерфейс IStream позволяет читать и записывать данные в потоковые объекты. Потоки аналогичны файлам. Каждый объект потока имеет свои собственные права доступа и указатель поиска. Потоки могут оставаться открытыми в течение длительных периодов времени без использования ресурсов файловой системы.
Методы в этом интерфейсе представляют данные вашего объекта в виде непрерывной последовательности байтов, которые вы можете читать или записывать. Существуют также методы фиксации и отмены изменений в потоках, открытых в транзакционном режиме, и способы ограничения доступа к диапазону байтов в потоке.
Исходник содержит практические реализации интерфейсов IStorage и IStream. На примере показаны создание объектов хранения, потоков хранилища, запись файлов в потоки, переименование и удаление потоков и субхранилищ.
В архиве два исходника, с примерами использования составных файлов в качестве хранителей ресурсов программы. Чтение потоков из составного файла: загрузка изображения, загрузка текстовой информации, загрузка звука. Примеры использования составных файлов для GDI и GDI+.
Исходники протестированы в средах программирования Visual C++6, Visual C++7, Visual Studio .NET 2003. Для создания и редактирования составных файлов предлагается программа CompoundFK2.0 (находится в разделе прикладные программы).
Скачать исходник
Тема: «Исходники применения составных файлов»
examplecf_vs6.zip
Размер:1345 КбайтЗагрузки:8063