Orange Garden Room
Zip::Archiveのメモ
PerlのZIP処理ツールZip::Archiveのメモ

ZIPファイルをLWPでダウンロードして解凍、とかするときに使ったり。
自分の用途は主にHPの更新用ー。
自動更新自動更新。

詳しい記述はCPANのリファレンスを参照。(英文)
http://search.cpan.org/dist/Archive-Zip/lib/Archive/Zip.pm


とりあえず、圧縮はどうでもいいので解凍。

基本的に次のように読み込む。
my $zip = Zip::Archive->new();
if ($zip->read("zipfile.zip") != "AZ_OK") { print "Failure!\n"; exit(1); }

AZ_OKは、Zip::Archive内での処理が成功してるときの値。
0らしいよ。るるぶみると。

ちなみに、ダブルクォーテーションで囲んであるけど、strictプラグマ使ってるから。
'subs'のせいで、文字列リテラル禁止。ざーんねん。
外部のconstantとか、our宣言とかはstrictしてると駄目っぽいですねー。
ってわけでダブルクォーテーションで囲んでも展開されるのでそれで。


$zip->members()
ファイルの中身『全て』のオブジェクトの配列を返す。
foreachでまわして使いたいところ。

これで得られたオブジェクトから、$obj->fileName()ってやると、ファイル名が得られる。
これで得られたファイル名は、ディレクトリ名も含まれる。
トップディレクトリがtopdirだとして、ファイル名がfile.datだとすると『topdir/file.dat』っていうのが得られる。


$zip->numberOfMembers()
ファイルの総数を返す。


$zip->memberNames()
ファイルの名前の配列を返す。
上のmembersやった後、$obj->fileName()で得られるファイル名と一緒。


$zip->memberNamed($string)
$stringに示される文字列と一致するファイルのオブジェクトを返す。


$zip->membersMatching($regexp)
$regexpに従って、一致するファイルのオブジェクトの配列を返す。
my @members = $zip->membersMatching(".*\.txt")
みたいな感じで使ってね。Perl標準の正規表現と一緒らしいので、どんなの入れればいいかとか調べることー。


$zip->zipfileComment([$string])
引数省略したときはZIPファイルについてるコメントを返す。文字列。
引数を入れたときは、コメントを新しく上書きした上で、ついてたコメントを返す。文字列ね。


$zip->extractMember($arg1, [$arg2])
ファイルを解凍する。ちゃんとreadしてること前提……って上のもそうだけど!
第一引数に、名前またはオブジェクトを入れる。上に書いてあるあれ。名前は取得したものそのまんま。ディレクトリとか勝手にはじかないように。
第二引数は無くてもいいけど、書いた場合はその名前で保存される。
途中必要なディレクトリは自動生成。
あとなんかOtherwizeとか本文に書いてあるけど意味わかんね! 誰かよろしく!


$zip->extractMemberWithoutPaths($arg1, [$arg2])
extractMemberの途中必要なディレクトリ自動生成してそこに解凍が無いバージョン。
カレントフォルダに、名前のまま解凍される。
これで全部解凍すると、現在のディレクトリに全部解凍。


$zip->extractTree()
これが一番つかうんじゃなかろうか。
引数なしで、カレントディレクトリに中身を全部ツリーで解凍。
解凍ソフトにつっこんだときの、頭にそのZIPファイル名のディレクトリ作らずに解凍する感じ。

引数を1個入れると、ZIPの中のディレクトリを解凍する。
たとえば、ZIPファイルの中に『k/data1.dat』『k/data2.dat』『k/n/sub1.dat』『c/data1.dat』『br/data1.dat』が合ったとする。
$zip->extractTree("k");
って書くと、data1.datとdata2.datがカレントディレクトリに、sub1.datがディレクトリnの中に解凍される。
多分、k/nとか書くと、sub1.datがカレントディレクトリに解凍されるんじゃないかなー。

引数を2個入れると、1個目の効能そのままで、2個目のディレクトリ構造で保存される。
上と同じ例で、次の文を実行するとする。
$zip->extractTree("k", "results");
こうすると、カレントディレクトリにディレクトリresultsが作られ、その中にdata1.datとdata2.dat。
更にその中にディレクトリnがつくられsub1.datが保存される。
2個目の引数もresults/kとかすると、resultsの下に更にkが作られてそん中にはいる。
/で初めて、/results/dataとか書いたりすると、その通りにディレクトリツリーの頭のところのからのディレクトリに保存されるっぽい。


3つ目の引数はUNIX以外のファイルシステム用。主にWindowsかしら?
$zip->extractTree("k", "results", "d:");
まあ、わかりやすい。
2個目までは一緒で、Windows環境だとDディスクになる。
基本コマンドプロンプトで起動するときはCでぃすくだろうから、それ対策?
もちろんDディスクとかにプログラム実行前に移動していればしなくていいんだろうけど。




ってわけで解凍あたりはこれだけあればおっけー、だと思うよ。
わかんなかったら英文読むんだ!
圧縮は他のサイトやら英文読んでください。

ぼくは必要にならない限りやらないので(’’
|その他|みと|2008/2/26(Tue) 10:09:02|コメント(18)|トラックバック(0)|
この記事へのトラックバック
この記事のトラックバックURL
http://orange.grandaria.com/room/weblog.cgi?mode=trackback&id=12
コメント一覧
guz0Uz njtstdhmzugd, [url=http://xjylrbjlhitc.com/]xjylrbjlhitc[/url], [link=http://yetcaxnxeebi.com/]yetcaxnxeebi[/link], http://ozawwjyarofq.com/
written by xhhpgyjr$form(2010/11/3(Wed) 12:27:22)
追加

●my $data = $zip->contents("filename")

で、ファイルの中身読み込む。
新FALで使用。


●$zip->memberNamed("filename");

これ使えば、ファイルの存在確認。
成功すれば、オブジェクトを返すっぽい。
存在しないファイル指定すれば、空返す。
written by みと<%CommentUrl form="[HP]"%>(2010/10/17(Sun) 16:31:33)
hCdgQi ancvbstdvlop, [url=http://hrbhkcbyxzvr.com/]hrbhkcbyxzvr[/url], [link=http://ekfgxhgtrslb.com/]ekfgxhgtrslb[/link], http://njqeokibcfiz.com/
written by akfvvqgibaq$form(2010/8/6(Fri) 20:27:04)
NBu5sR veojeqqtruze, [url=http://rlizikhukpbv.com/]rlizikhukpbv[/url], [link=http://cxvukrqjoick.com/]cxvukrqjoick[/link], http://hqgqlnsmkgeg.com/
written by riwhlr$form(2010/7/11(Sun) 20:36:12)
BUY VIAGRA http://webmediamx.com BUY VIAGRA http://webmediamx.com BUY VIAGRA
written by BUY VIAGRA$form(2010/7/7(Wed) 20:21:23)
buy viagra http://webmediamx.com buy viagra http://webmediamx.com buy viagra
written by buy viagra$form(2010/6/29(Tue) 15:46:22)
viagra http://webmediamx.com viagra http://webmediamx.com viagra
written by viagra$form(2010/6/28(Mon) 23:41:30)
HKYUoI yaftyvasixbo, [url=http://xaizocfcqxbo.com/]xaizocfcqxbo[/url], [link=http://gbanntjbblip.com/]gbanntjbblip[/link], http://eupxckhjtnak.com/
written by pcmvsqfplz$form(2010/2/22(Mon) 02:34:15)
oXHjbB ubvbpiorvtla, [url=http://uqdtyyxdlcpw.com/]uqdtyyxdlcpw[/url], [link=http://lbmqamxvpsoq.com/]lbmqamxvpsoq[/link], http://fwdgmbvkhtxr.com/
written by lwzqex$form(2009/12/15(Tue) 23:32:54)
7f6Fpe gsodvyxncjjr, [url=http://rgynzfzrrfrb.com/]rgynzfzrrfrb[/url], [link=http://mlsoaajcymbp.com/]mlsoaajcymbp[/link], http://pulxejmdbpwq.com/
written by vfprrn$form(2009/11/12(Thu) 01:05:36)
Jy4xI5 vafxobjpipiv, [url=http://pspdlujlqdkc.com/]pspdlujlqdkc[/url], [link=http://probcduwfnxj.com/]probcduwfnxj[/link], http://yrhwcsfqntvu.com/
written by rykgcl$form(2009/9/7(Mon) 17:04:37)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:31:40)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:31:38)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:31:31)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:31:20)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:30:37)
written by HsvsRsvsesv$form(2009/6/8(Mon) 01:30:35)
NpFSaB wdhdjidffsqp, [url=http://tqkxmfupodnx.com/]tqkxmfupodnx[/url], [link=http://xvjzktrlimys.com/]xvjzktrlimys[/link], http://iyryoezrdfwr.com/
written by fqxqsnwb$form(2009/1/19(Mon) 07:23:38)
コメントする

名前(全角20文字まで):

ホームページアドレス(半角150文字まで):

本文: