zipの解凍は ByteArray.uncompress を使えばできるんですが、zipの中にサブフォルダまであると解凍して保存する仕方が探してもよくわかりません。

調べたところ『Fzip』というライブラリがありそれではできそうだったのですが、これもまたサブフォルダを解凍してくれませんでした。

悩んだ結果、アプリからコマンドラインを実行させて解凍すればいけるんじゃね?と考え実際にやってみました!

1. 7-Zipのダウンロード

圧縮・解凍ソフト7-Zip』のコマンドラインバージョンをダウンロードし、アプリフォルダ直下にunzipフォルダを作成しその中にまるごと入れます。その作業で7-Zipのexeは appfolder/unzip/7za.exe にあるはずです。

2. batファイルの作成

コマンドラインからbatファイルを実行させたいのでunzip.batファイルをunzipフォルダに作成します。batファイルの内容は以下です。

パスについてはAIRアプリから見てのパスになります。ですのでこの場合test.zipはAIRアプリと同じ階層にある事になります。 x は解凍するときにつけます。 -y は解凍する際に同じファイル名があった場合上書きをするを意味しています。その他オプションはコマンドプロンプトで7za.exeを実行すると確認できます。

3. AIRのコード

7za.exeをコマンドプロンプトで実行させると分かるんですがメッセージを出力させながら解答していくため OutputDataHandler は何回か実行されます。

解凍が終了すると『Everything is Ok』の文字がコマンドプロンプトで表示されるためその表示をAIR側で取得したら解凍完了と判断しています。