【问题标题】:Adding files to zipped folder in perl在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();

【问题讨论】:

    标签: linux perl zip archive


    【解决方案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 作为第一个结果。
    • 马特,你是对的,搜索确实将其作为第一个结果。对不起我的无知............只是寻求一些帮助。我以为我会在这里找到一个更清晰简洁的答案,我猜我错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2017-04-18
    • 2021-10-16
    • 2010-09-05
    • 2013-12-29
    相关资源
    最近更新 更多