2009-08-04 5 views
1

Я создаю программу на C++, которая будет читать обычный текст .docx. Мой план атаки - переименовать .docx как .zip, а затем распаковать. Затем я переименую файл .xml, содержащий текст документа, в виде .txt и проанализирую его.Распаковка каталога в C++

Прямо сейчас я выяснил переименование, которое было достаточно простым. Сейчас я борюсь с распаковкой. Я очень хорошо разбираюсь в C++, но это мой первый раз, когда я расширялся до реальных текстовых приложений и использовал его за пределами библиотеки STL.

Сначала я попробовал много оберток для C++ из библиотеки zlib, но не смог их скомпилировать или работать должным образом (это может быть связано с тем, что среда находится в Cygwin). По этой причине мне кажется, что я должен по умолчанию использовать беспорядочный код zlib для этого. Но из всей документации и примеров, которые я могу найти, это только показывает, что zlib используется для чтения .zip, который представляет собой сжатие одного файла, а не нескольких файлов. Я теперь не знаю, куда идти отсюда, и, как я уже говорил, совершенно новый для домена вне STL, я чувствую себя совершенно потерянным.

Любая помощь или руководство очень ценится!

Спасибо, Майкл

+2

Вам не нужно переименовывать файлы. Если вы хотите предоставить файл docx для распаковки в вашей программе, вам нечего останавливать. –

+0

А, ОК. Я не был уверен в том, что произойдет, поэтому я решил, что перейду в переименование, чтобы быть в безопасности. Спасибо, что разобрался. – mcFreid

+0

Приложения реального слова? Пун предназначался? –

ответ

1

Zlib является для сжатия GZip, не ZIP сжатия (see here for details).

В результате, возможно, вам лучше подойдет утилита unzip, предоставляемая в Cygwin, и доступна для lots of platforms.

+0

Я не уверен, что вы подразумеваете под первым вопросом. Конечно, я могу использовать код C, если это то, что вы подразумеваете. Не могли бы вы дать более подробную информацию о том, как использовать «unzip» исполняемый файл в Cygwin (хотя я бы предпочел, чтобы код был портативным, если бы это сделало его не таким). Также я уверен, что zlib может выполнять сжатие и сжатие zip и gzip. – mcFreid

+0

Я прояснил первый вопрос и добавил ссылку, чтобы показать, что zlib не может обрабатывать сжатие ZIP. Вам нужно будет использовать библиотеку minizip, снабженную zlib. –

+0

Mike, Спасибо за ссылку. Я неправильно понял, что вы имели в виду. Я думал, вы говорите о .zip-файлах, а не .zip архивах/каталогах. Я также попробовал инфо-zip, и мне не удалось его компилировать в cygwin. Позже, когда я буду дома, я отправлю ошибки, которые получаю. – mcFreid

1

Я не думаю, что zlib поддерживает многопользовательские ZIP-файлы напрямую (может быть, неправильно), поэтому вы можете искать альтернативы. В стороне, вы также можете рассмотреть возможность перехода с cygwin на MinGW, если вам не нужна совместимость с POSIX/UNIX, предоставляемая cygwin.

+0

Если «многофайловые» zips вы имеете в виду zip-файлы, содержащие несколько файлов, то есть minizip. Я не совсем понимаю, как minizip относится к zlib (кроме этого он требует zlib), но он работает. См. Http://www.winimage.com/zLibDll/minizip.html. –

+0

Я немного запутался в том, как установить minzip. С сайта, с которым вы связаны, кажется, что теперь он идет с zlib, но я этого не вижу. Помните, что я новичок в использовании дополнительных библиотек с C++. – mcFreid

1

У меня проблема с аналогичной проблемой, но на самом деле у меня нет отличного решения.

В настоящее время zlib не поддерживает несколько файлов.

См: C/C++ Packing and Compression

+0

Спасибо за ссылку. Я посмотрел на http://nih.at/libzip/index.html из вашего вопроса, и, похоже, он может дать мой ответ. Я собираюсь попробовать, как только смогу. – mcFreid