顶部468*60ad 顶部468*60ad 顶部468*60ad 顶部468*60ad

用Perl动态建立ZIP压缩文件

2007-10-31 00:35:30  来源:CSDN 

查看ZIP压缩文件内容

如何查看一个现有的压缩文件呢?Archive::Zip带有一个read()方法,可以阅读一个压缩文件的内容,并可访问与单个文件有关的详细信息。列表B是它的一个应用实例:

列表B

以下为引用的内容:

#!/bin/perl

Webjx.Com

use Archive::Zip;# imports

网页教学网

$obj = Archive::Zip->new();# new instance Webjx.Com

$status = $obj->read("dummy.zip");# read file contents Webjx.Com

if ($status != AZ_OK) { 网页教学网

die('Error in file!');

} else {

foreach $member ($obj->members()) { # print file information

print $member->fileName(), ", ", $member->uncompressedSize(), ":", $member->compressedSize(), "n";

} 网页教学网

}

网页教学网

这里,read()方法用于阅读ZIP压缩文件并获得与其内容有关的信息。然后,调用members()方法返回一个结构化对象数组,每个数组元素代表压缩文件中的一个单独文件。通常来说,数组中的每个对象包含相应文件的名称信息、它的许可模式、状态、压缩类型、大小以及最后一次修改时间。我们可以用一个循环方便地提供这些信息,并对它们重新格式化,使它更具可读性,如上面的列表B所示。

以下是一个输出结果样本:

mystuff/ad.gif, 1447:345

mystuff/alcon.doc, 200:34

mystuff/alcon.xls, 28580:21483

网页教学网

在现有ZIP压缩文件中插入文件

如果你已经有一个ZIP压缩文件,只需要往其中增加一个新文件,那么操作过程就相当简单:只要调用addFile()方法,增加文件的名称和路径即可。为说明这一点,我们回到dummy.zip文件,并试图给它增加一些新文件。(列表C网页教学网

列表C 网页教学网

以下为引用的内容:

#!/bin/perl

use Archive::Zip;# imports 网页教学网

$obj = Archive::Zip->new();# new instance

$status = $obj->read('dummy.zip');# read file contents

if ($status != AZ_OK) {

die('Error in file!');

} else { 网页教学网

@files = ('otherstuff/logo.gif',# files to add

'otherstuff/header.gif',

'morestuff/berlin-bear.psd');

foreach $file (@files) {

$obj->addFile($file);# add files

}

Webjx.Com

if ($obj->overwrite() != AZ_OK) {# overwrite archive with new contents

print "Error in archive creation!";

网页教学网

} else {

print "Archive created successfully!"; Webjx.Com

}

Webjx.Com

}

在一个现有压缩文件中插入一个文件的过程与建立一个新压缩文件非常相似:首先初始化一个新的Archive::Zip对象,在其中读入原始的压缩文件,再建立一个包含增加文件清单的数组,并把这个数组提交给循环中的addFile()方法。成功添加文件后,就可以用overwrite()方法用更新后的压缩文件覆盖原始的压缩文件。

从现有的ZIP压缩文件中提取文件 网页教学网

往压缩文件中添加文件后,如何将它们提取出来呢?很明显,使用extractTree()方法!这个方法允许你把现有压缩文件中的所有文件提取到一个指定的目录中,如列表D所示:

列表D

Webjx.Com

以下为引用的内容:

#!/bin/perl

网页教学网

use Archive::Zip;# imports

$obj = Archive::Zip->new();# new instance

$status = $obj->read('dummy.zip');# read file contents

if ($status != AZ_OK) { Webjx.Com

die('Error in file!');

网页教学网

} else {

$obj->extractTree(undef, "/tmp/");# extract files

网页教学网

} 网页教学网

网页教学网

在上例中,extractTree()方法解压整个压缩文件,将其中的所有文件提取到一个指定目录中。如果这个目录不存在,extractTree()方法将自动建立这个目录;当然,这以脚本获得写磁盘的许可为前提。

有趣的是,你还可以进行更具选择性的提取操作,只提取与一个预先定义的列表相匹配的文件。要完成这个任务,你需要使用extractMember()方法,它逐个提取压缩文件,帮助你安置一个中间过滤器或在继续提取前执行检查。在模块文档中可以找相关实例。 网页教学网

灵活性

如上面的例子所示,Perl的Archive::Zip类的功能相当强大,为你处理ZIP压缩文件提供很大的灵活性。希望上面的脚本样本提起你的兴趣,让你开始自己应用这个类,更一步了解它的运行机制。祝编程快乐! 网页教学网

共2页: 上一页 [1] 2 下一页

文章评论

共有 0 位网友发表了评论 查看完整内容

推荐文章