С++ межплатформенная zlib simplifer-wrapper

Я ищу оболочку, которая перегоняет 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 ГБ, но вы не сможете их открыть...