zlib を次のように抽出するラッパーを探しています。
- OpenZipFile()
- GetItemInfo(n)
- UnzipItem(n) // アイテム n がディレクトリの場合、再帰的に解凍するためのボーナス ポイント。
たとえばcodeproject.comでzlibライブラリのラッパーをたくさん見かけますが、ファイル/メモリバッファ/パイプに解凍するというプラットフォーム固有の追加機能を提供するために、それらはすべてプラットフォーム固有です。
boost::iostreams では、zlib、gzip、および bzip2 形式を使用する可能性があります。
http://www.boost.org/から見つけることができます
zlibソースアーカイブには、「minizip」という名前の寄稿があります。
「minizip」は、.zipファイルでの再生に使用できるファイルのセットです。あなたが必要とする基本的なサービスはすでにそこにあります:
もちろん、これはオブジェクト指向ではありません(そして、それがminizipの作成者の目標ではなかったと確信しています)が、単純なオブジェクト指向ラッパーを書くのは簡単なはずです。
firstobjectの簡単なzlibはクロスプラットフォームのままです。単一のファイルeasyzlib.cにzlibがあり、正確なサイズを割り当てる前にメモリ要件を決定する機能が追加されたezcompressおよびezuncompress関数のみを公開します。
minizip を使用する場合 -- 注意してください。zlib 1.2.3 に同梱されているバージョンには 2GB の zip ファイル制限があります。IT はサイズが 2 GB を超える zip を生成しますが、それらを開くことはできません...
これは古いスレッドですが、Boost の ZLib ラッパーを投入すると思いました。
http://www.boost.org/doc/libs/1_47_0/libs/iostreams/doc/classes/zlib.html
別の FOSS プロジェクトからコードを取得することもできます。たとえば、ScummVM には、必要なすべての機能を備えた移植性の高い Zlib ラッパー ( implementation、header ) に加えて、他の種類のアーカイブと一般的にインターフェイスするための OO レイヤーがあります。
多分それは良い出発点ですか?ラッパー関数は完全にスタンドアロンで移植性があります (ニンテンドー DS でも動作します) が、OO レイヤーは多くのカスタム クラスに依存しているため、独自のプロジェクトに追加するのは難しい場合があります。
GZStream は一見の価値があります。これは、STL iostream クラスを拡張する優れたクロスプラットフォーム ラッパー ラウンド ZLib です。
http://www.cs.unc.edu/Research/compgeom/gzstream/
他のいくつかのラッパーよりもこのラッパーの優れている点は、非常に大きなアーカイブで作業している場合、データセット全体をメモリにロードする必要がないことです。