如何使用Perl列出ZIP文件的内容?

时间:2011-08-08 13:12:19

标签: perl zip

我的目标实际上就是它在标题中所说的内容。

我有以下代码行,只打印出[view archive],当我点击它时,浏览器只需下载zip文件。

print "\<a href=\"http:\/\/intranet.picsel.com\/~devcvs\/view-file.cgi?file=$reviewdata{'document'}&review_id=$reviewdata{'id'}\"\>[view archive]\<\/a\>\n";

我希望做的是在页面的任何位置列出此zip文件中包含的文件,例如就在这个链接链接到的新页面下面,并将文件名作为参数。

我相信一旦完成,浏览器应该只关注这些文件并在浏览器中查看它们,因为它们将是pdfs和html文件,我不会预见到任何问题。

我确信有一个模块可以做到这一点,但我不确定如何使用它来实现我的目标。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

查看Archive::Zip

use strict;
use warnings;

use Archive::Zip qw/ :ERROR_CODES :CONSTANTS /;

my $zipFile = 'someZip.zip';

my $zip = Archive::Zip->new();

unless ( $zip->read( $zipFile ) == AZ_OK ) {  # Make sure archive got read

    die 'read error';
}

my @files = $zip->memberNames();  # Lists all members in archive

print $_, "\n" for @files;

答案 1 :(得分:1)

使用Archive::Zip无疑会使代码更容易,如果要在zip文件上进行大量工作,则应该安装该模块。

但是,对于那些不愿安装任何东西的人来说,有一种方法可以仅使用核心模块IO::Uncompress::Unzip(已经是任何标准Perl发行版的一部分)列出zip文件的内容。

use strict;
use warnings;

use IO::Uncompress::Unzip qw($UnzipError);

my $zipFile = '/path/to/zipfile.zip';

my $u = IO::Uncompress::Unzip->new($zipFile)
    or die "Error: $UnzipError\n";

my $status;
for ($status = 1; $status > 0; $status = $u->nextStream()) {
    my $header = $u->getHeaderInfo();
    my $zippedFile = $header->{Name};
    if ($zippedFile =~ /\/$/) {
        last if $status < 0;
        next;
    }
    print "$zippedFile\n";
}