PERL - 在zip64存档中重命名文件成员

时间:2014-08-06 16:33:20

标签: perl zip compression

我正在更改执行压缩的PERL代码,以便能够处理zip64扩展名。

旧代码正在使用Archive::Zip模块,可以按如下方式使用。

# Create a Zip file
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $zip = Archive::Zip->new();

# Add a file from disk
my $file_member = $zip->addFile( 'xyz.pl', 'AnotherName.pl' );

Archive::Zip不支持zip64扩展名,因此我使用的是IO::Compress::Zip模块。

我正在寻找一种以某种方式模仿addfFile功能的方法,在压缩时重命名或者在压缩后编辑档案。

我找不到任何可以帮助我这样做的PERL模块。

  1. PERL有没有办法做到这一点?
  2. 如果没有直接的方式,我可以改变一些东西 用于重命名其成员的存档文件的标题?
  3. 谢谢

2 个答案:

答案 0 :(得分:2)

我认为这是你在PerlMonks Renaming a file member in zip64 archive上提出的问题?

如果是,请回答相同的内容。

尝试这一点 - 如果需要,它将自动创建输出文件作为符合Zip64标准的Zip存档(即,如果大小超过4千兆位,或者您在zip存档中有> 64k成员)。否则,它会创建一个标准的Zip存档。

use Archive::Zip::SimpleZip qw($SimpleZipError) ;

my $z = new Archive::Zip::SimpleZip "my1.zip"
    or die "Cannot create zip file: $SimpleZipError\n" ;

$z->add('xyz.pl', Name => 'AnotherName.pl' );


$z->close();

如果要强制创建Zip64存档(即使存档足够小而不需要它),在创建Archive :: Zip :: SimpleZip对象时添加 Zip64 选项,像这样

my $z = new Archive::Zip::SimpleZip "my1.zip", Zip64 => 1
    or die "Cannot create zip file: $SimpleZipError\n" ;

答案 1 :(得分:0)

我不确定是否有办法用IO :: Compress :: Zip来做,但是。 为什么不在将文件添加到存档之前重命名文件? 如果您需要保存带有名称的原始文件,请将文件复制到某个临时文件夹,重命名,然后从temp中归档和删除。