2

嗨朋友我可以使用当前运行脚本的目录中的文件创建一个 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 文件,但里面没有文件!

4

2 回答 2

4

更新

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

但是,这样做的结果是它不能正确处理当前工作目录未包含的文件。

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

于 2013-04-02T12:33:23.803 回答
-2

朋友们,我终于找到了解决这种情况的方法。只是我在 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();
于 2013-04-03T18:59:35.220 回答