Как проверить, существует ли подфайл в файле chm?

У меня есть несколько файлов CHM, и каждый из файлов представляет собой сжатый html для 5 разных файлов Html. Я имею в виду, скажем, у меня есть 5 разных файлов с именами Alpha, Beta, Gamma, Delta, Theta. Скажем, я сжимаю эти 5 в файл CHM. Давайте назовем этот файл CompressedHtm.CHM. У меня >500 таких файлов. Теперь я хочу проверить, есть ли у всех этих> 500 файлов все 5 подфайлов (например, альфа, бета, гамма, дельта, тета). Есть ли способ проверить это в VC++ 6.0/MFC без декомпиляции файлов CHM?


person Varun Mahajan    schedule 05.01.2010    source источник


Ответы (2)


Вместе с Free Pascal поставляется полностью автономный (*) исполняемый CHMLS командной строки, который позволяет отображать содержимое CHM-файла. Он существует для нескольких платформ.

Вы можете выполнить это, используя каналы, а затем обработать вывод.

Несколько дней назад я заархивировал исполняемые файлы для sb else, вы можете получить их здесь http://www.stack.nl/~marcov/chmls.zip

(или загрузите выпуск fpc 2.4.0 для Windows, если вы мне не доверяете)

(*) Я не знаю состояние на win9x.

Вывод выглядит так:

 <Section> <Offset> <UnCompSize>  <Name>
 0               0            0  /#ITBITS
 1        27737212       192334  /#STRINGS
 0              70          133  /#SYSTEM
 1        22414493       169080  /#TOCIDX
 1        26847375       339904  /#TOPICS
 1        27187279       294757  /#URLSTR
 1        27482036       255176  /#URLTBL
 1        27929546      1174749  /$FIftiMain
 1        22411742         2751  /$OBJINST
 0               0            0  /$WWKeywordLinks/
 1        24122411       628812  /$WWKeywordLinks/BTree
 1        24751223       111371  /$WWKeywordLinks/Data
 1        24862594         2378  /$WWKeywordLinks/Map
 1        24864972            1  /$WWKeywordLinks/Property
 0               0           70  /_#_README_#_
 0               0            0  /baseunix/
 1        10656150         1395  /baseunix/_stat_ver.html
 1        10651853         1438  /baseunix/_stat_ver_kernel.html
 1        10654717         1433  /baseunix/_stat_ver_linux.html
 1        10650407         1446  /baseunix/_stat_ver_linux_old.html
 1        10653291         1426  /baseunix/_stat_ver_svr4.html
 1        10452426         1438  /baseunix/arg_max.html
 1        10644473         1510  /baseunix/bitsinword.html

Файлы, начинающиеся с # и $, являются внутренними файлами.

(инструменты представляют собой утилиты, которые поставляются с библиотекой CHM Free Pascal, которая поддерживает чтение/запись CHM независимо от других инструментов для документации и справочных систем Free Pascal. Она не зависит от ОС и, насколько мне известно, отлично работает на OS X/PowerPC64.

person Marco van de Voort    schedule 23.01.2010

Справка HTML использует IE для отображения. Поэтому вам просто нужно использовать веб-браузер для перехода по URL-адресу, например mk:@MSITStore:c:\WINDOWS\Help\htmlhelp.chm::/apiref.htm. Если файл не существует, вы получите DWebBrowserEvents2::NavigateError с кодом состояния 404. Обратите внимание, что вы можете получить другие ошибки в современных версиях Windows, поскольку Microsoft ограничила его использование из соображений безопасности.

person Sheng Jiang 蒋晟    schedule 06.01.2010