2011-01-14 53 views
7

zlib 1.2.5の使用を開始しましたが、zipファイルから抽出するルーチンはありません。私は配布の一部であるminizipアプリケーションについて読んだ。zlib C++とファイルの抽出

これはどのように行われるはずですか?

答えて

21

はい、うまくいきます。 (しかし、今まであなたがCコードを好きではない場合、あなたはC++とC#のコードを持っている7-ZIPのSDKをご覧ください。)

  • zipアーカイブからファイルをブラウズし、解凍するためにすべての機能をしていますzip.h

解凍例えば

contrib\minizip\unzip.hcontrib\minizip\zip.hを見て):::でunzip.h

  • すべての機能をzipアーカイブにファイルを圧縮し、追加されているzipファイルののunzOpen()機能がunzFile

    は、アーカイブ内のすべてのファイルを閲覧するために、このunzFileunzGoToFirstFile()unzGoToNextFile()を使用して返します。

    その後、あなたはきっとあなたには、いくつかの瞬間にunzOpenCurrentFile()を呼び出す必要があり、すなわち、そのサイズのため、unzGetCurrentFileInfo()

    を各ファイルのファイル情報を取得します。

    を呼び出し、fileinfoのサイズを使用してunzReadCurrentFile()を呼び出し、アーカイブファイルのバイナリコンテンツを取得します。

    オプションで、独自の入出力機能を使用するために提供できる不透明な構造がありますが、明らかにファイルアクセス用のデフォルトのwin32実装があるため、それについても心配する必要はありません。

    PS:とunzCloseCurrentFileを呼び出すことを忘れていけない()私は必要ないくつかの機能を追加し、それがよりよいそれを使用することminizipのラッパーを構築しています

  • +1

    私は関数を見つけました。私はminiunzipを使ってテストしています。私は7zipでファイルc:\ a.zipを作成しました。 1つのファイルが含まれています。私はminiunzip -x c:\ a.zip -d c:\ rezaを実行し、unzOpen2_64は失敗します。私はWindows上でこれを実行しています。なぜこれが当てはまるのでしょうか? – reza

    +0

    これらのリンクは無効です。 – kberson

    +0

    @kbersonさんの発言。私はhttps://github.com/madler/zlib/blob/master/contrib/minizipを指すリンクを更新しました –

    6

    投稿者:http://www.zlib.net/zlib_faq.html#faq11: 11. zlibは.zipアーカイブを処理できますか?

    それ自体ではなく、 zlibディストリビューションのcontrib/minizipディレクトリを参照してください。

    チュートリアルはありませんが、minizip zip.cソースは、zlibを使用したzipファイルのIO(おそらく圧縮と復元)のためのものです。

    まだチュートリアルはありませんBUT http://www.winimage.com/zLibDll/minizip.html詳細を提供します。

    2

    。ですが、完全な説明がここにあります、最新のC++ 11を使用しないとVisual Studio 2013を使用して開発された(移植する必要がありますが、私は、UNIX上でそれをテストしていない)

    https://github.com/sebastiandev/zipper

    あなたが全体を圧縮することができますフォルダ、ストリーム、ベクタなどの機能も備えています。

    +0

    zipフォルダ内のアイテムをラッパーに置き換えることは可能ですか?私はzipからファイルを抽出し、いくつかの変更を加え、zipファイル全体を上書きすることなくzipに書き戻す必要がある場合があります。最初にunzipperクラスを使用してファイルを抽出して変更し、ジッパークラスのadd関数を使用して同じファイル名で上書きするように見えます。 – Wes

    +0

    minizipにはその機能がありません。ジップから削除することさえできません。私は、ジップの標準は、それを行う可能性を与えると思うが、それは最初にminizipで実装し、後でこれらのラッパーに追加する必要があります。これは、データを圧縮することに重点を置いていました。特に、一般的な圧縮が目的でしたが、ジップの編集や変更に使用されることを意図していないアプリの内部使用のためのメモリに重点を置いていました。 – Sebastian

    関連する問題