Как извлечь содержимое контейнера OLE? - PullRequest
5 голосов
/ 29 июня 2010

Мне нужно открыть файл MS Word (.doc) и извлечь его составляющие файлы («[1] CompObj», «WordDocument» и т. Д.).Что-то вроде 7-zip может быть использовано для этого вручную, но мне нужно сделать это программно.

Я понял, что документ Word является контейнером OLE (следовательно, 7-zip можно использовать для просмотра егосодержимое), но я не могу понять, как (используя C ++):

  1. открыть контейнер OLE
  2. извлечь каждый составляющий файл и сохранить его на диск

Я нашел пару примеров автоматизации OLE (например, здесь ), но то, что я хочу сделать, кажется менее распространенным, и я не нашел конкретных примеров.

Если у кого-нибудь есть идея API (?!) И учебник по работе с OLE, буду благодарен.То же самое с примерами кода.

Ответы [ 2 ]

4 голосов
/ 29 июня 2010

Он называется составными файлами, частью API структурированного хранилища.Вы начинаете с StgOpenStorageEx ().Он мало что покупает для файла Word .doc, сами потоки имеют сложный двоичный формат.Чтобы действительно читать содержимое документа, который вы хотите использовать, автоматизируя, позволяя Word читать файл.Это редко делается в C ++, но этот проект показывает вам, как это сделать.

2 голосов
/ 29 июня 2010

Этот сайт http://www.endurasoft.com/vcd/ststo.htm содержит учебник, информацию об API и пример кода, который делает все, что я искал.

...