この日記の方針。
- この日記では、超初心者向けの内容は取り扱っておりません。モジュールの利用など、実践的な内容が中心となります。
- ここに貼られるソースは、基本的にそのままでは動かないものばかりです。各自の責任でご利用ください。
- 内容が間違っていることがあります。その際はご指摘いただけるとありがたいです。「検証してみたら違う結果が出た」などの報告も大歓迎です。
- perl -e die
2006-08-28 (Mon)圧縮フォルダ
■ [Archive] Archive::Zipで圧縮ファイルを作る

散々苦労して入れたArchive::Zip。これを使って、圧縮フォルダを作ってみましょう。
今回は、FreeBSDのサーバ上でWindows向けの圧縮ファイルを作るという壮大なプロジェクトです。よーするに、Shift_JISのファイル名で吐きたいと。
=memo
一部抜粋。流石に全部は載せられない。
↓$list は、こんな感じでデータが入っている。
destは、Shift_JISに変換済み・・・だと思ってね。
実際はテキストファイルから読み込んでるので。
my $list = [
{ src => 'file1.txt', dest => 'ファイル1.txt' },
{ src => 'file2.html', dest => 'ファイル2.html' },
{ src => 'file3.jpg', dest => 'ファイル3.jpg' },
];
=cut
{
my $zip = Archive::Zip->new;
foreach my $file ( @$list ) {
my $src = sprintf( 'dir/%s',
$file->{src}
);
# 日本語の名前が設定してあればそちらを。
my $dest = $file->{dest} || $file->{src};
$zip->addFile( $src, $dest );
}
my $status = $zip->writeToFileNamed( 'hoge.zip' );
if( $status != Archive::Zip::AZ_OK ) {
print "圧縮に失敗しました・・・。\n";
}
print "圧縮完了。\n";
}
簡単でした。
ディレクトリをまるごと圧縮したいなら↓のような感じ。
# addFile の代わり。 # $src: 取り込むディレクトリ $dest: 出力ディレクトリ名 $zip->addTree( $src, $dest );
もっと簡単でした。
ToDo
CGIで使っているので、出来れば外部ファイルではなくSTDOUTに吐かせたかった。どうやるんだろう?
あと、ZIPのMIMEってナニ? application/zip かな?
余談
Archive::Lha はないそうです。誰か作ってください。
追記
補足です。肝心なことを書き忘れました。ここ見る人はわかっていると思うけど
use Archive::Zip;
これ必須です。アタリマエですけど。
コメント
トラックバック - http://perl.g.hatena.ne.jp/Cress/20060828