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