C ++ кроссплатформенный zlib simpifer-обертка - PullRequest
10 голосов
/ 06 ноября 2008

Я ищу упаковщик, который отправляет zlib на:

  1. OpenZipFile ()
  2. GetItemInfo (п)
  3. UnzipItem (n) // Бонусные баллы за рекурсивное разархивирование, если элемент n является каталогом.

Я вижу множество обёрток вокруг библиотеки zlib, скажем, на codeproject.com, но все они зависят от платформы, чтобы обеспечить добавленную платформо-зависимую функцию разархивирования в файл / буфер памяти / канал.

Ответы [ 7 ]

12 голосов
/ 29 января 2009

В boost :: iostreams есть возможность использовать форматы zlib, gzip и bzip2.

Вы найдете его из http://www.boost.org/

9 голосов
/ 06 ноября 2008

В исходном архиве zlib есть вклад с именем "minizip".

"minizip" - это набор файлов, которые вы можете использовать для воспроизведения файлов .zip. Основные услуги, которые вам нужны, уже есть:

  • unzOpen
  • unzLocateFile
  • unzOpenCurrentFile
  • unzGetCurrentFileInfo
  • unzCloseCurrentFile
  • unzClose

Конечно, это не объектно-ориентированный (и я уверен, что это не было целью создателя минизипа), но написание простой объектно-ориентированной оболочки должно быть легко.

2 голосов
/ 02 сентября 2011

Это старая ветка, но я подумал, что добавлю оболочку Boost's ZLib:

http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/zlib.html

2 голосов
/ 21 ноября 2009

GZStream стоит посмотреть. Это хорошая кроссплатформенная оболочка ZLib, которая расширяет классы STL iostream.

http://www.cs.unc.edu/Research/compgeom/gzstream/

Что хорошо в этой оболочке по сравнению с некоторыми другими, так это то, что если вы работаете с очень большими архивами, вам не нужно загружать весь набор данных в память.

2 голосов
/ 06 ноября 2008

Вы можете попытаться получить код из другого проекта FOSS. Например, ScummVM имеет очень переносимую оболочку Zlib ( реализация , header ) со всеми необходимыми функциями, а также слой OO для общего взаимодействия с любым другим видом архива.

Может быть, это хорошая отправная точка? Функции-оболочки полностью автономны и переносимы (черт, они даже работают на Nintendo DS), но уровень OO зависит от многих пользовательских классов, которые может быть трудно добавить в ваш собственный проект.

1 голос
/ 05 марта 2010

Если вы будете использовать minizip - обратите внимание, что версия, поставляемая с zlib 1.2.3, имеет ограничение 2 ГБ для zip-файла. Он создаст zip размером> 2 ГБ, но вы не сможете их открыть ...

...