zlib c ++ и распаковка файлов - PullRequest
7 голосов
/ 15 января 2011

Я начал использовать zlib 1.2.5, и я не вижу никакой процедуры для извлечения из файла zip?Я читал о приложении Minizip, часть дистрибутива.

Так ли это должно быть сделано?

Ответы [ 3 ]

21 голосов
/ 15 января 2011

Да, это хорошо.(Но если вам когда-нибудь не нравится код на C, вам следует взглянуть на 7-zip SDK, содержащий код на C ++ и C #.)

  • Все функции для просмотра и распаковки файлов из zipархив находится в: unzip.h
  • Все функции сжатия и добавления файлов в zip-архив находятся в: zip.h

(см. contrib \ minizip \ unzip.h и contrib \ minizip \ zip.h )

, например, распаковка: функции unzOpen() вашего zip-файла возвращают unzFile

затем используйте unzGoToFirstFile() и unzGoToNextFile() для этого unzFile, чтобы просмотреть все файлы в архиве.

, затем вы получите информацию о файле для каждого файла с unzGetCurrentFileInfo(), а именно для его размера,

, конечно, вы должны вызвать unzOpenCurrentFile() в какой-то момент.

и позвонить unzReadCurrentFile(), используя размер из fileinfo, извлекая двоичное содержимое архивного файла.

опционально, тамэто непрозрачная структура, которую вы можете предоставить для использования своей собственной функции ввода / вывода, но, очевидно, есть реализация по умолчанию win32 fили доступ к файлу, так что вы можете даже не беспокоиться об этом.

PS: и не забудьте вызвать unzCloseCurrentFile ()

6 голосов
/ 15 января 2011

От: http://www.zlib.net/zlib_faq.html#faq11: 11. Может ли zlib работать с архивами .zip?

Не само собой, нет.Смотрите каталог contrib / minizip в дистрибутиве zlib.

Там нет учебника, но исходный код minizip zip.c предназначен именно для ввода-вывода (так что, по-видимому, для сжатия и распаковки) для файлов zip с использованием zlib.

И до сих пор нет учебника, НО http://www.winimage.com/zLibDll/minizip.html дает более подробную информацию.

2 голосов
/ 26 июля 2015

Я построил оболочку вокруг минизипа, добавив в нее некоторые необходимые функции и сделав ее более удобной для использования.Использует ли последний C ++ 11 и разработан с использованием Visual Studio 2013 (должен быть переносимым, но я не тестировал его на Unix)

Здесь есть полное описание: https://github.com/sebastiandev/zipper

вы можете архивировать целые папки, потоки, векторы и т. Д. Кроме того, приятная особенность - делать все целиком в памяти.

...