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
вы можете архивировать целые папки, потоки, векторы и т. д. Кроме того, хорошая функция делает все полностью в памяти.