在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,然后压缩和清除重复项。

Perl | Perl读取gzip压缩文件

迅捷在线压缩如何压缩图片文件?压缩成png怎么操作?

如何在bash中将所有子目录中的所有文件gzip到一个压缩文件中

是否可以在 C# 中将文件夹压缩在一起?

perl 打开gz压缩文件 输出gz压缩文件