Comments 6
Спасибо за ссылку на сайт «Мастера Дельфи». Столько полезного в своё время там нашёл! Прям вспомнились школьные годы, дорогущий интернет по-модему, те самые звуки хр-хр-хрх-уиу-уиу-хррр. Эхх…
Спасибо за статью, огромный труд!
Благодаря статье, я теперь знаю о составных файлах, думаю применю где-нибудь.
Благодаря статье, я теперь знаю о составных файлах, думаю применю где-нибудь.
Добрый день!
В своей статье вы не упомянули методы ReadClassStg/WriteClassStg, позволяющие подписывать файл уникальным GUID. Почему?
Я в своей программе, использующей, OLE хранилища, не использовал метод Commit. И тфу-тьфу, пока не получил битых файлов (конечно, у меня статистика использования программы не такая большая как у Вас). Метод Commit нужно вызывать перед обнуление корневого хранилища или после каждой операции записи?
Например:
Спасибо за статью!
В своей статье вы не упомянули методы ReadClassStg/WriteClassStg, позволяющие подписывать файл уникальным GUID. Почему?
Я в своей программе, использующей, OLE хранилища, не использовал метод Commit. И тфу-тьфу, пока не получил битых файлов (конечно, у меня статистика использования программы не такая большая как у Вас). Метод Commit нужно вызывать перед обнуление корневого хранилища или после каждой операции записи?
Например:
<code class="delphi">procedure WriteInt(V: integer; const Name: WideString; var Storage: IStorage); var BytesWritten: Integer; Stream: IStream; begin Olecheck(Storage.CreateStream(PWideChar(Name), STGM_CREATE or STGM_WRITE or STGM_DIRECT or STGM_SHARE_EXCLUSIVE, 0, 0, Stream)); try Olecheck(Stream.Write(@V, sizeof(Integer), @BytesWritten)); // ?? Olecheck(Storage.Commit(STGC_DEFAULT)) finally Stream := nil end end; </code>
Спасибо за статью!
ReadClassStg/WriteClassStg я упомянул в декларации заголовка, но сам их не использую (не было надобности).
А по поводу вызова Commit — к сожалению не на всех машинах происходит автоматическая запись данных, но закономерности я не понял, поэтому всегда вызываю его принудительно, во избежание :)
Ну а вызывать его в принципе нужно один раз, перед закрытием хранилища, вызвав его для рута.
А по поводу вызова Commit — к сожалению не на всех машинах происходит автоматическая запись данных, но закономерности я не понял, поэтому всегда вызываю его принудительно, во избежание :)
Ну а вызывать его в принципе нужно один раз, перед закрытием хранилища, вызвав его для рута.
А я использую ReadClassStg/WriteClassStg как уникальный флаг что это это «мои» файлы :)
К сожалению не достаточно кармы что бы проголосовать за статью :\.
К сожалению не достаточно кармы что бы проголосовать за статью :\.
Данное поле предназначено немного для других вещей:
msdn.microsoft.com/ru-ru/library/windows/desktop/ms862136.aspx
Но, в принципе, если не будете пересекаться по UID с существующими врапперами над стораджем — можно и так вывернуться. Просто там в заголовке есть резервируемые поля, я бы, для данных целей воспользовался хотя-бы _ulReserved2
msdn.microsoft.com/ru-ru/library/windows/desktop/ms862136.aspx
Но, в принципе, если не будете пересекаться по UID с существующими врапперами над стораджем — можно и так вывернуться. Просто там в заголовке есть резервируемые поля, я бы, для данных целей воспользовался хотя-бы _ulReserved2
Sign up to leave a comment.
Работаем с Compound File