zlib c++ и извлечение файлов

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

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

3 ответов


Да, он делает это хорошо. (Но если вам не нравится C-код, вы должны посмотреть 7-zip SDK, которые имеют код на C++ и c#.)

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

(посмотри contrib\minizip\распаковать.h и contrib\minizip\zip.h)

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

затем использовать unzGoToFirstFile() и unzGoToNextFile() на unzFile для просмотра всех файлов в архиве.

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

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

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

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

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


From: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 дает больше подробности.


Я построил обертку вокруг minizip, добавив некоторые функции, которые мне нужны, и сделав его приятнее использовать. Is использует последнюю версию c++11 и разработан с использованием Visual Studio 2013 (должен быть переносимым, но я не тестировал его на unix)

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

вы можете архивировать целые папки, потоки, векторы и т. д. Кроме того, хорошая функция делает все полностью в памяти.