くれすのPerl日記 このページをアンテナに追加 RSSフィード

この日記の方針。

  1. この日記では、超初心者向けの内容は取り扱っておりません。モジュールの利用など、実践的な内容が中心となります。
  2. ここに貼られるソースは、基本的にそのままでは動かないものばかりです。各自の責任でご利用ください。
  3. 内容が間違っていることがあります。その際はご指摘いただけるとありがたいです。「検証してみたら違う結果が出た」などの報告も大歓迎です。
  4. perl -e die

2006-08-28 (Mon)圧縮フォルダ

[] Archive::Zipで圧縮ファイルを作る 17:16  Archive::Zipで圧縮ファイルを作る - くれすのPerl日記 を含むブックマーク はてなブックマーク -  Archive::Zipで圧縮ファイルを作る - くれすのPerl日記  Archive::Zipで圧縮ファイルを作る - くれすのPerl日記 のブックマークコメント

散々苦労して入れた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