Archive for 8月, 2009

以前作ったAIRでのzip解凍アプリですが、圧縮もできるようにと、表示を単なるリストからflexlibを使ってTreeGridにしました。

1ファイルを一覧からドラッグ&ドロップで解凍できるようにしてあります。

anzipper_v0.7

こんな感じになりました。

詳しくはこちらからからどうぞ。

これに伴い、zipライブラリのほうもバージョンアップしたので、このライブラリのページも後で作ろうと思います。

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

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

Zipの圧縮方法

[AS]
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();
}
[/AS]

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

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

[AS]
zipWriter = new ZipFileWriter(ZipFileWriter.HOST_UNIX);
//
// デフォルトは ZipFileWriter.HOST_WIN です。
//
[/AS]
のようにしてください。
これで、日本語ファイル名がUTF-8になります。
また、ファイルのパーミッションを設定したい場合には、
[AS]
// ディレクトリのモード(空のディレクトリを追加した場合)
zipWriter.setDirMode(“0777″);
// ファイルのモード
zipWriter.setFileMode(“0777″);
[/AS]
のように設定してください。
ここは文字列の8進数で設定してください。
設定後、すべてこのパーミッションが適用されます。

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

[AS]
public function addBytes(data:ByteArray,filename:String,bytes:ByteArray,date:Date = null):void
[/AS]
というメソッドがありますので、こちらを利用ください。
実際にaddFileも、この関数を使っています。
date は、最終変更日時ですが、何も入れなければ”今”の時間が入ります。

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

Fzipとの違い

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

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

ソフトウェア&ライブラリ



ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
カレンダー
2009年8月
« 7月   9月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カスタム検索
RSS
Add to Google
にほんブログ村 IT技術ブログへ