如何在perl中创建zip文件?

时间:2013-04-02 12:00:30

标签: perl zip

嗨朋友我可以使用目前运行脚本的目录中的文件创建一个zip文件现在我想从各个目录创建zip文件可以有人帮助我吗? 我的代码是;

use IO::Compress::Zip qw(:all);

  zip [ glob("inventory_report_for_neus.xls") ] => "my.zip"
    or die "Cannot create zip file: $ZipError" ;

这将生成包含特定文件但

的zip文件
use IO::Compress::Zip qw(:all);

      zip [ glob("..\\inventory_report_for_neus.xls") ] => "my.zip"
        or die "Cannot create zip file: $ZipError" ;

这也是生成zip文件,但里面没有文件!

2 个答案:

答案 0 :(得分:3)

<强>更新

IO::Compress::Zip根据当前目录中文件的原始位置创建一个具有分层结构的zip文件。

但是,结果是它无法正确处理当前工作目录未包含的文件。

最简单的解决方案可能是在压缩之前将目录更改为父目录。如果这不是一个选项,请在压缩之前将文件复制到临时位置,或者可能使用IO::Compress::Zip's more advanced features,例如从文件句柄写入zip文件。

答案 1 :(得分:-1)

朋友们最后我找到了这个案例的解决方案。我在perl中使用了shell命令,所以我将使用相应的文件创建zip文件...代码如下。

use strict;
use warnings;
use MIME::Lite;
use  Net::SMTP;
my $msg = MIME::Lite->new (
  From => 'xyz@gmail.com',
  To => 'thiyagu040@gmail.com',
  Subject => 'with inline images',
  Type =>'multipart/mixed'
) or die "Error creating mult;$!\n";
system("zip test.zip '../test_dir/report.xls'");
.
.
.
.
 $msg ->(     filename     => test.zip,
              content_type => 'application/zip',
              disposition  => 'attachment',
              name         => $filename,
          );
MIME::Lite->send('smtp', 'smtp.gmail.com', Timeout=>60,AuthUser=>'xyz', AuthPass=>'remotecontrol');
$msg->send();