原文:
Perl提供大量处理不同文件格式的内置函数和外来模块。特别是,它可以通过Archive::Zip模块,动态建立和阅读ZIP压缩文件,而不必依赖外来工具和实用工具。本教程说明这个模块的基础理论和常用方法。
首先,在Perl提示符下运行以下命令下载并安装该模块(如果你还没有安装它):
perl> perl -MCPAN -e "install Archive::Zip"
注意,Archive::Zip模块依靠zlib库运行,因此在安装过程中,系统可能要求你下载并安装这个库。
建立ZIP压缩文件
首先我们看一个简单的例子。动态建立一个包含几个其它文件的ZIP压缩文件。输入(或复制)如列表A所示的脚本:
列表A
#!/bin/perl
use Archive::Zip;# imports
$obj = Archive::Zip->new();# new instance
@files = ('mystuff/ad.gif',
'mystuff/alcon.doc',
'mystuff/alcon.xls');# files to store
foreach $file (@files) {
$obj->addFile($file);# add files
}
if ($obj->writeToFileNamed('dummy.zip') != AZ_OK) {# write to disk
print "Error in archive creation!";
} else {
print "Archive created successfully!";
}
这段脚本相当简单,但值得仔细看一看。第一步是输入Archive::Zip模块,并初始化Archive::Zip对象的一个实例。接下来,将所有文件清单以及它们在磁盘中的位置进行压缩,保存为一个Perl数组。要记住的是,脚本(准确地说,运行脚本的用户)必须拥有访问这些磁盘位置的许可,否则建立压缩文件的过程就会失败。
然后,用foreach()循环遍历这个数组,用对象的addFile()方法在压缩文件中增加列出的文件。一旦循环完成,则通过调用writeToFileNamed()方法把最终的压缩文件写入磁盘,writeToFileNamed()方法接受所建立的ZIP文件的完整路径和名称。记住,脚本必须拥有向指定的磁盘位置写入文件的许可;否则,writeToFileNamed()方法将会失败,因而不能建立压缩文件。
特别要注意调用writeToFileNamed():方法的返回值。如果文件被正确写入,Archive::Zip返回一个AZ_OK值,在往后操作前系统会检查这个值。之后在这个文件中你还会看到这个返回值。
要应用上面的脚本实例,请修改@files数组的内容以反映你的当地系统配置,并试图在命令提示符或浏览器中执行它。如果一切运行正常,这段脚本应该会找到并将所有文件读入一个叫做dummy.zip的文件中。
查看ZIP压缩文件内容
如何查看一个现有的压缩文件呢?Archive::Zip带有一个read()方法,可以阅读一个压缩文件的内容,并可访问与单个文件有关的详细信息。列表B是它的一个应用实例:
列表B
#!/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 {
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
}
if ($obj->overwrite() != AZ_OK) {# overwrite archive with new contents
print "Error in archive creation!";
} else {
print "Archive created successfully!";
}
}
在一个现有压缩文件中插入一个文件的过程与建立一个新压缩文件非常相似:首先初始化一个新的Archive::Zip对象,在其中读入原始的压缩文件,再建立一个包含增加文件清单的数组,并把这个数组提交给循环中的addFile()方法。成功添加文件后,就可以用overwrite()方法用更新后的压缩文件覆盖原始的压缩文件。
从现有的ZIP压缩文件中提取文件
往压缩文件中添加文件后,如何将它们提取出来呢?很明显,使用extractTree()方法!这个方法允许你把现有压缩文件中的所有文件提取到一个指定的目录中,如列表D所示:
列表D
#!/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 {
$obj->extractTree(undef, "/tmp/");# extract files
}
在上例中,extractTree()方法解压整个压缩文件,将其中的所有文件提取到一个指定目录中。如果这个目录不存在,extractTree()方法将自动建立这个目录;当然,这以脚本获得写磁盘的许可为前提。
有趣的是,你还可以进行更具选择性的提取操作,只提取与一个预先定义的列表相匹配的文件。要完成这个任务,你需要使用extractMember()方法,它逐个提取压缩文件,帮助你安置一个中间过滤器或在继续提取前执行检查。在模块文档中可以找相关实例。
灵活性
如上面的例子所示,Perl的Archive::Zip类的功能相当强大,为你处理ZIP压缩文件提供很大的灵活性。希望上面的脚本样本提起你的兴趣,让你开始自己应用这个类,更一步了解它的运行机制。祝编程快乐!
分享到:
相关推荐
"Atom-ctags.zip" 这部分再次确认了我们正在处理的是与Atom编辑器相关的扩展或插件,而".zip"表明它是一个压缩文件,通常包含多个文件或目录。描述进一步解释了Atom是一个基于Web技术的开源文本编辑器,这意味着它...
- 一个Windows窗体应用程序,创建的归档内容的隐私AES加密ZIP压缩文件。 - 在PowerShell的脚本或VBScript行政执行备份和归档。 - WCF服务,它接收一个zip文件作为附件,并动态的zip解压缩到一个流分析 - 一个老派...
"matrix.cpantesters.org背后的代码_Perl_JavaScript_下载.zip"这个压缩包文件看起来包含的是用于构建和运行matrix.cpantesters.org网站的源代码。该网站是一个知名的Perl模块测试结果展示平台,它汇总了全球Perl...
【标题】"中文论坛.zip" 是一个压缩文件,通常用于集合多个相关文件或目录,便于存储和传输。在IT行业中,这种格式广泛应用于备份数据、分享资料或分发软件包。 【描述】"中文论坛.zip" 提示这个压缩包可能包含了一...
【服务器脚本.zip】是一个包含有关服务器脚本的资源压缩包,通过提供的链接(已省略实际URL,这里仅作概念说明)可以下载。密码为“1km0”,解压后,用户可以获取到名为“服务器脚本”的一系列文件,这些文件通常...
"CGI Star Professional v5.19 特别版.zip"是主要的程序包,解压缩后通常会包含CGI Star Professional的安装文件、用户手册、许可协议、可能的示例代码以及其他支持文件。安装这个软件之前,你需要确保你的计算机上...
【压缩包子文件的文件名称列表】: 1. **Win64 VS16**:这是一个文件夹,很可能包含了使用Visual Studio 2019编译的64位Apache服务器二进制文件,如httpd.exe(服务器主程序)、配置文件、日志文件等。 2. **ReadMe....
【压缩包子文件的文件名称列表】:132676282821472775,这个看似随机的数字字符串可能是压缩包内的一个文件或目录的名称。在实际的文件管理系统中,这可能是数据库文件、配置文件、源代码文件、文档或其他资源的名称...
标题中的"A.Simple.Wedding.2019.zip"似乎是指一个关于电影《简单婚礼》的压缩文件,可能包含了该电影的2019年版本的相关资料。然而,描述中的"ola hello we want a some"似乎是一句拼写错误且不完整的句子,它并...
这个“Xammp下tinyshop环境部署.zip”文件显然是为了指导用户如何在XAMMP平台上配置TinyShop电子商务平台。TinyShop可能是一个基于PHP的开源电子商务解决方案,用于快速搭建在线商店。 首先,我们来详细了解XAMMP。...
标题中的“pcre-8.44.zip”指的是Perl Compatible Regular Expressions (PCRE)库的8.44版本的压缩文件。PCRE是一个开源库,它提供了与Perl 5语言中使用的正则表达式相匹配的功能。这个库在各种编程语言和软件项目中...
"zip"则表明这个包是用ZIP格式压缩的,这是一种常见的文件压缩格式,易于传输和存储。 描述中的“最新”和“绝版”可能暗示这是FastCGI 2.4.1版本的最后一个发布,或者是某个特定时期的最终版本,对于那些寻找稳定...
"安装说明,解压密码看这里.txt" 文件可能包含了安装和解压缩过程中的具体步骤,以及可能的解压密码,这对于保护压缩文件安全并确保正确安装非常重要。用户应仔细阅读并遵循这些指示,以避免安装过程中出现任何问题。...
10. **集成其他技术**:Apache常与PHP、Perl、Python等脚本语言结合,构成LAMP(Linux, Apache, MySQL, PHP)或WAMP(Windows, Apache, MySQL, PHP)等开发环境,用于构建动态网站和Web应用程序。 总之,“httpd-...
IIS_XPSP3.zip是一个专为Windows XP Service Pack 3(SP3)设计的IIS安装包,意味着这个压缩文件包含了适用于该操作系统的IIS版本。 **Windows XP SP3**是Windows XP的最后一个重大更新,提供了大量的安全改进和...
.zip是常见的文件压缩格式,而.7z则是7-Zip软件的高压缩比格式,它能提供更高的压缩率,尤其对于文本和源代码文件。这意味着你需要解压工具(如7-Zip或WinRAR)来访问这些文件。 总的来说,这个压缩包提供了用于...
一个常见的疑问是,如果用户原本期望下载的是其他类型的文件,如RAR或ZIP压缩文件,但结果却下载到了PHP文件,这意味着可能出现了下载错误。这种情况下,可能是因为下载链接指向了一个PHP脚本文件,而并非直接可下载...
该资源是一个名为"6008绿色幻灯大图博客响应式手机网站模板5424_企业网站模板PHP整站源码.zip.7z"的压缩文件,它包含了一个完整的PHP网站模板,专为博客和企业网站设计,强调响应式布局以适应不同设备,如手机和平板...
例如,可以使用`ZipArchive`类来创建和管理ZIP格式的压缩文件,通过设置适当的权限和加密方法确保文件的安全性。 2. **存储解压密码**:为了保证安全性,解压密码不应硬编码在代码中,而应存储在安全的位置,如...
【压缩包子文件的文件名称列表】包括以下文件: 1. `vMyApp.mcp`:可能是一个Palm OS的应用程序文件,"MyApp"可能是应用的名字,".mcp"可能是Palm OS特定的扩展名,用于执行或配置应用。 2. `i2Readme.txt`:通常是...