Zipファイルの読み込みについてのサンプルがアドビのAIRのマニュアル(?)にあった。

ただし、このサンプルはHTMLに記述して使うもので、FlexのなかでActionScriptとしてのサンプルでなかったので、
それを参考にFlex & ActionScript用に書き直してみた。

といっても、クラスやらなんやらの名前(パッケージ名)が違う程度ですが。

AIRでZipファイルを簡単に解凍できるということをしって私にはとっても役にたちました。
これで、MS-Officeのファイル(2007以降のXML形式)はzipファイルですから・・・・、このファイルを簡単に操作できるようなものも作れるというわけです。
まあ、最初はファイルのメタ情報をとるような感じになるとおもいますが・・・・

後で本格的につくって、MS-Officeのファイルを操作しようかな・・・と野心が芽生えました・・・

というわけで、以下私がZipの動きをみるために書いたソースです。
zipファイルの指定は書き直してください。

[AS]
import flash.utils.*;
import flash.filesystem.*;

private var stream:FileStream;
private var zfile:File;

private var h_signature:uint; // シグネチャ( 4バイト )
private var h_version:uint; // バージョン
private var h_compMethod:uint; // 圧縮方式 (2bytes)
private var h_filenameLength:uint;
private var h_xfieldLength:uint; // 拡張フィールドの長さ

public function unzip():void
{
zfile = File.desktopDirectory.resolvePath(“ここにデスクトップにあるファイルを指定してください”);
trace(zfile.nativePath);
stream = new FileStream();
stream.addEventListener(Event.COMPLETE, readBytes);
stream.addEventListener(IOErrorEvent.IO_ERROR,ioError);
stream.openAsync(zfile,FileMode.READ);
trace(“unzip end”);
}

private function readBytes(e:Event):void{
trace(“FILE SIZE IS ” + zfile.size);
trace(“STR SIZE IS ” + stream.bytesAvailable);

var bytes:ByteArray = new ByteArray();
stream.endian = Endian.LITTLE_ENDIAN;
bytes.endian = Endian.LITTLE_ENDIAN;

while(stream.position < zfile.size){ stream.readBytes(bytes,0,30); bytes.position = 0; h_signature = bytes.readInt(); if(h_signature != 0x04034b50){ trace("sig is " + h_signature); break; } else{ trace("sig is OK : " + h_signature); } bytes.position = 4; h_version = bytes.readByte(); trace("versioin is " + h_version); bytes.position = 8; h_compMethod = bytes.readByte(); trace("compmethod is " + h_compMethod); // ファイル名の長さ bytes.position = 26; h_filenameLength = bytes.readShort(); // 拡張領域のサイズ bytes.position = 28; h_xfieldLength = bytes.readShort(); var offset:uint = h_filenameLength + h_xfieldLength; stream.readBytes(bytes,30,offset); // ファイル名を読み取る bytes.position = 30; var filename:String = bytes.readUTFBytes(h_filenameLength); trace("filename is [" + filename + "]"); bytes.position = 18; var compSize:uint = bytes.readUnsignedInt(); bytes.position = 22; var uncompSize:uint = bytes.readUnsignedInt(); trace("org size is " + uncompSize); if(uncompSize > 0 ){
stream.readBytes(bytes,0,compSize);
if(h_compMethod == 8 ){
bytes.uncompress(CompressionAlgorithm.DEFLATE);

// ここでbytesの中身を見ればOK
}
}
}

}

private function ioError(e:Event):void{
trace(“IO Error ” + e);
}

[/AS]

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2009年7月
« 6月   8月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ