前回、zipの展開方法を記述しましたので、今度は圧縮方法です。
例の如く、実際の圧縮には ByteArray.compress() を用いています。

基本的に、動作の確認はWindowsでしかやっておりません。
ただし、作成したzipファイルがLinuxでのunzipコマンドで展開できることは確認しております。

Zipの圧縮方法

import  com.coltware.commons.zip.*;
import  flash.filesystem.*;

public function zip():void{
  zipWriter = new ZipFileWriter();
  zfile = File.desktopDirectory.resolvePath("sample.zip");

  var file1:File = File.desktopDirectory.resolvePath("sample.doc");
  zipWriter.addFile(file1,"sample.doc");

  //  空のディレクトリを追加する場合には、以下のようにする
  //  空でない場合は、直接下のファイルのようにしてしまえば問題ありません。
  zipWriter.addDirectory("フォルダ1");

  var file2:File = File.desktopDirectory.resolvePath("sample1.doc");
  zipWriter.addFile(file2,"フォルダ2/読んでください.doc");

  //  これを忘れないでください。ファイルとしては作成されますが、
  //  ここで最後の情報を記述していますので、
  //  おかしなファイルになってしまいます。
  zipWriter.close();
}

また、パスのセパレータ( “/”ってやつ)は、OSに関係なく”/”にしてください。
これは、Zipフォーマットのルールですが。
また、ファイルの先頭に”/”をつけないでください。
Windowsでは見えなくなります。(linux unzipの場合にはワーニングがでて無視されるようです。)

Linux用にZipファイルを作成したい場合

zipWriter = new ZipFileWriter(ZipFileWriter.HOST_UNIX);
//
//  デフォルトは ZipFileWriter.HOST_WIN です。
//

のようにしてください。
これで、日本語ファイル名がUTF-8になります。
また、ファイルのパーミッションを設定したい場合には、

//  ディレクトリのモード(空のディレクトリを追加した場合)
zipWriter.setDirMode("0777");
//  ファイルのモード
zipWriter.setFileMode("0777");

のように設定してください。
ここは文字列の8進数で設定してください。
設定後、すべてこのパーミッションが適用されます。

ファイルからではなくByteArrayデータから登録したい

public function addBytes(data:ByteArray,filename:String,bytes:ByteArray,date:Date = null):void

というメソッドがありますので、こちらを利用ください。
実際にaddFileも、この関数を使っています。
date は、最終変更日時ですが、何も入れなければ”今”の時間が入ります。

これを書いていて、Zipの展開には非同期処理があるのですが、圧縮には非同期処理をつけ忘れたことに気が付きました。

Fzipとの違い

  1. 日本語ファイルの対応
    MACでZipしたファイルをWinで解凍すると文字化けするという問題の対応などもしてあります。
    日本語環境で、Windowsで作られたと思われるZipファイルはSJIS, それ以外はUTF-8がファイル名の文字コードになります。
    ただし、書き込み時には作成されるホストOSを選ぶようにします。
    文字コード以外にも、考慮する部分が出てきますので・・・
  2. 読み込み時に情報レコードから先に読み大きなファイルでも少ない時間で情報を取得
    ファイルを最後から読んでいます。
    まあ、このあたりはAIRだからこそできるわけですが・・・・
    ActionScriptってファイルの読み込みが遅いんですよね。
  3. ファイルの属性対応
    いわゆる、そのファイルがディレクトリか、ファイルかなど。また、UNIX系の場合にはパーミッションなど。
    このあたりが設定されていないと、うまく解凍できないものもありますので・・・
  4. 非同期対応
    解凍していると、固まってしまうのですがこれを回避しています。
    ただし、圧縮ではありません。(ただ忘れただけですので作ります)

ダウンロードは前回の記事を見てください。

関連記事

Leave a Reply

Spam protection by WP Captcha-Free

RSS
Add to Google

カスタム検索
ソフトウェア&ライブラリ


ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年8月
« 7月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  
アーカイブ
にほんブログ村 IT技術ブログへ