Я ищу оболочку, которая перегоняет zlib в:
- OpenZipFile()
- GetItemInfo (п)
- UnzipItem (n)//Бонусные точки для распаковки рекурсивно, если элемент n является каталогом.
Я вижу много оберток вокруг библиотеки zlib, скажем, codeproject.com, но они все зависят от платформы, чтобы обеспечить добавленную платформенную функциональность для распаковки файлов/буфера/канала.
Ответ 1
В boost:: iostreams есть возможность использовать форматы zlib, gzip и bzip2.
Вы найдете его от http://www.boost.org/
Ответ 2
В исходном архиве zlib есть вклад под названием "minizip".
"minizip" - это набор файлов, которые вы можете использовать для воспроизведения .zip файлов. Основные сервисы, которые вам нужны, уже есть:
- unzOpen
- unzLocateFile
- unzOpenCurrentFile
- unzGetCurrentFileInfo
- unzCloseCurrentFile
- unzClose
Конечно, это не объектно-ориентированный (и я уверен, что это не было целью создателя minizip), но писать простой объектно-ориентированный обертку должно быть легко.
Ответ 3
Вы можете попытаться захватить код из другого проекта FOSS. Например, ScummVM имеет переносимую оболочку Zlib (реализация, header) со всеми необходимыми функциями, плюс слой OO для взаимодействия в общем с любым другим архивом.
Может быть, это хорошая отправная точка? Функции обертки полностью автономны и переносимы (черт, они даже работают на Nintendo DS), но уровень OO зависит от многих пользовательских классов, которые могут быть трудно добавить в ваш собственный проект.
Ответ 4
firstobject easy zlib остается кросс-платформенным; он имеет zlib в одном файле easyzlib.c и предоставляет только функции ezcompress и ezuncompress с добавленной функцией определения потребности в памяти до выделения точного размера.
Ответ 5
GZStream стоит посмотреть. Это хорошая кросс-платформенная оболочка вокруг ZLib, которая расширяет классы STL iostream.
http://www.cs.unc.edu/Research/compgeom/gzstream/
Что хорошего в этой оболочке над некоторыми из других, так это то, что если вы работаете с очень большими архивами, вам не нужно загружать весь набор данных в память.
Ответ 6
Если вы будете использовать minizip - обратите внимание, версия thet, поставляемая с zlib 1.2.3, имеет ограничение на zip файл 2GB. IT будет производить zip размером > 2 ГБ, но вы не сможете их открыть...
Ответ 7
Это старый поток, но я думал, что брошу в Boost ZLib wrapper:
http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/zlib.html