在perl中将文件添加到压缩文件夹
Posted
技术标签:
【中文标题】在perl中将文件添加到压缩文件夹【英文标题】:Adding files to zipped folder in perl 【发布时间】:2015-12-10 17:01:13 【问题描述】:我有以下 perl 脚本,旨在接受命令行参数,将所有用户数据文件存档到 zip 文件中,然后删除原始数据。该脚本没有问题,但是当以不同的用户作为参数再次运行时,它会覆盖 userData.zip 文件中的先前数据。我已经搜索但无法找到如何执行此任务。它应该继续接受用户作为参数并将他们的文件夹附加到 userData.zip 文件中。
感谢任何帮助。
use 5.14.2;
use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use File::Path;
my ($DATAFILEIN, $DATAFILEOUT);
my ($new,$zip);
use constant COLUMNS => 6;
sub main
verifyArguments();
setDataFileIn();
zipFiles();
deleteUserFiles();
#setDataFileOut();
#printData();
#writeData();
sub verifyArguments
if (!(@ARGV) || !(-e $ARGV[0]))
die "\n\nYou must specify correct file name upon command invocation.\n\n";
sub setDataFileIn
$DATAFILEIN = $ARGV[0];
sub zipFiles
print "\nBacking up ".$DATAFILEIN."\n";
sleep 1;
$zip = Archive::Zip->new();
opendir (DIR, $DATAFILEIN) or die $!;
while (my $file = readdir(DIR))
# Use -f to look for a file
next unless (-f $DATAFILEIN."\\".$file);
$zip->addFile($DATAFILEIN."\\".$file, );
print "Added $file to zip\n";
closedir(DIR);
my $fileName = $DATAFILEIN;
unless ( $zip->writeToFileNamed('userData.zip') == AZ_OK )
die 'write error';
print "Successfully backed up $fileName to userData.zip\n";
sub deleteUserFiles
rmtree($DATAFILEIN);
main();
【问题讨论】:
【参考方案1】:您是否阅读了 Archive::Zip 常见问题解答的这一部分?
无法读取/修改/写入相同的 Zip 文件
问:为什么我不能打开一个 Zip 文件,添加一个成员,然后再写回去?我明白了 尝试时出现错误消息。
A:因为 Archive::Zip 不(通常也不能)读取文件 内容存入内存,需要保留原 Zip 文件 直到新文件的写入完成。
执行此操作的最佳方法是将 Zip 写入临时文件并 然后将临时文件重命名为旧名称(可能在 删除旧的)。
Archive::Zip v1.02 添加了归档方法 overwrite() 和 overwriteAs() 来做这个简单而仔细。
有关此技术的示例,请参见示例/updateZip.pl。
我在您的代码中没有看到 $zip->overwrite()
。
查找 CPAN 模块信息的最佳位置是http://metacpan.org。在这种情况下,Archive::Zip 页面。该页面有一个指向 Archive::Zip::FAQ 的文档链接。你可以在那里阅读它,或者你可以在你安装了模块的系统上输入perldoc Archive::Zip::FAQ
。
示例是下载包的一部分。如果您使用 cpan
命令安装 Archive::Zip,则示例将位于构建位置。默认为~/.cpan/build/Archive-Zip-*/examples
。
【讨论】:
您好,感谢您的回复。该文档在哪里列出?我在这里搜索了 perldoc.perl.org 和 perlmonks。我只是一个初学者,所以我需要看例子才能理解语法。 @Number41 真的吗?在几乎任何搜索引擎上搜索“perl archive::zip”都会出现CPAN page 作为第一个结果。 马特,你是对的,搜索确实将其作为第一个结果。对不起我的无知............只是寻求一些帮助。我以为我会在这里找到一个更清晰简洁的答案,我猜我错了。以上是关于在perl中将文件添加到压缩文件夹的主要内容,如果未能解决你的问题,请参考以下文章
sh 在特定层次结构中将不确定数量的文件添加到.gitignore,然后压缩和清除重复项。