У меня есть несколько файлов CHM, и каждый из файлов представляет собой сжатый html для 5 разных файлов Html. Я имею в виду, скажем, у меня есть 5 разных файлов с именами Alpha, Beta, Gamma, Delta, Theta. Скажем, я сжимаю эти 5 в файл CHM. Давайте назовем этот файл CompressedHtm.CHM. У меня >500 таких файлов. Теперь я хочу проверить, есть ли у всех этих> 500 файлов все 5 подфайлов (например, альфа, бета, гамма, дельта, тета). Есть ли способ проверить это в VC++ 6.0/MFC без декомпиляции файлов CHM?
Как проверить, существует ли подфайл в файле chm?
Ответы (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.
Справка HTML использует IE для отображения. Поэтому вам просто нужно использовать веб-браузер для перехода по URL-адресу, например mk:@MSITStore:c:\WINDOWS\Help\htmlhelp.chm::/apiref.htm. Если файл не существует, вы получите DWebBrowserEvents2::NavigateError с кодом состояния 404. Обратите внимание, что вы можете получить другие ошибки в современных версиях Windows, поскольку Microsoft ограничила его использование из соображений безопасности.