unzip_example

【cocos2d-x】zipファイルを操作する

LINEで送る
Pocket

cocos2d-xではunzipと言うファイルが存在します。
これを使えば比較的簡単にzipファイルを操ることが出来ます。




サンプルプログラム



解説


それでは解説を入れていきましょう。

L.1, L.2

パスを指定し、unzFile型の変数へと格納していきます。
これはunzipされた結果のハンドルオブジェクトです。
以後はこの変数を用いてunzipされた結果を見ていきます。
もし、失敗していればNULLが返却されます。

その場合はunzip.cppのL.626〜L.738辺りにブレークポイントを置いてしらべてみましょう。

L.5

得られたzipの情報を取得します。
unz_global_infoは以下の様な構造体です。

L.12

zip内のファイルの最初のファイルにカーソルを合わせます。

L.13

for文で、zip内に含まれるファイル数分回す様にしています。

L.15

filinameはファイル名を保持するためのchar型の配列です。ここでは100と決め打っていますがファイル名を確保出来るように十分な大きさを入れておいてください。

L.16

ファイル名を取得しています。
そして、それをstringに変更し、出力すると言った流れです。

L.24

次のファイルにカーソルを合わせます。

L.26

zip内のファイル操作が終わったら必ずunzCloseメソッドを呼びます。

一つ困った事が…


多分zipファイルを操るときってどっかにリソースがあって、それをダウンロードして来た後だと思うんです。
unzipのインターフェースを見るとconst char* pathばかりが並びローカルに保存してあるzipファイルしか扱いませんと言わんばかり。
HTTPResponseのgetResponseData()で取得出来るstd::vector<char>*型の変数から直接unzip出来る方はないのかなぁと思ったりしています。

誰かのお役に立てば。

このブログのcocos記事一覧

LINEで送る
Pocket

Dalt

translimit, Inc. Application Engineer. Twitter: @daiki1003 Facebok: Daiki Asahi

【cocos2d-x】zipファイルを操作する」への2件のフィードバック

  1. ZipUtils の inflateMemory っていう関数がありますが、これでローカルに保存されていなくても、メモリ上にある zip ファイルの展開ができる気がするんですがどうでしょう?

    あと、 getResponseData() でとれるのは vector* というより、std::vector* 型ですね。

    1. > ZipUtils の inflateMemory っていう関数がありますが、これでローカルに保存されていなくても、メモリ上にある zip ファイルの展開ができる気がするんですがどうでしょう?
      うわーーーーーーー、めっちゃありがとうございます!
      試してみます!!!!

      > getResponseData() でとれるのは vector* というより、std::vector* 型ですね。
      ありがとうございます。編集しておきますね^^

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です