2
#!/usr/bin/perl
use strict;
use warnings;

my $archive_files = "C:\\Temp\\FREMOTE\\test.zip";
sub extract_archive($$);

extract_archive($archive_files, "C:\\Temp\\FREMOTE\\TEST\\");
extract_archive("C:\\Temp\\FREMOTE\\TEST\\testb.zip",
                "C:\\Temp\\FREMOTE\\TEST\\testb\\");

sub extract_archive($$) { 
    my $archive_file = shift;
    my $extract_dir  = shift;
    if (!  -d "$extract_dir") {
        mkdir $extract_dir;
    }
    use Archive::Any;
    my $archive = Archive::Any->new($archive_file);
    if($archive->extract($extract_dir)) {
        print "Extracted $archive_file into $extract_dir\n";
        undef $archive;
    } else {
        print "Failed to extracted $archive_file into $extract_dir\n";
    }
}

我收到以下错误。我该如何解决?

IO 错误:复制期间写入错误:文件描述符错误
 在 C:/Perl/site/lib/Archive/Any.pm 第 193 行。
IO 错误:复制期间写入错误:文件描述符错误
 在 C:/Perl/site/lib/Archive/Any.pm 第 193 行。
IO 错误:复制期间写入错误:文件描述符错误
 在 C:/Perl/site/lib/Archive/Any.pm 第 193 行。
IO 错误:复制期间写入错误:文件描述符错误
 在 C:/Perl/site/lib/Archive/Any.pm 第 193 行。
4

1 回答 1

0

我使用以下代码对其进行了测试。使用两个已知良好的 zip 文件,我将第二个 zip 文件添加到第一个文件中 - 以重现我相信您正在做的事情。使用原始代码,我在提取第二个文件期间不断收到错误消息:

Extracted C:\Temp\colorbox-master.zip into C:\Temp\FREMOTE\TEST\<br>
Can't call method "extract" on an undefined value at Perl-1.pl line 19.

与您的错误不同,但使用以下代码修复:

#!/usr/bin/perl
use strict;
use warnings;

my $archive_files = "C:\\Temp\\colorbox-master.zip";

extract_archive($archive_files, "C:\\Temp\\FREMOTE\\TEST\\");
extract_archive("C:\\Temp\\FREMOTE\\TEST\\easybox-v1.3.zip", "C:\\Temp\\FREMOTE\\TEST\\testb\\");

sub extract_archive {
    my $archive_file = shift;
    my $extract_dir  = shift;
    if (!-d "$extract_dir") {
        mkdir $extract_dir;
    }
    use Archive::Any;
    my $archive = Archive::Any->new($archive_file);
    if($archive->extract($extract_dir)) {
        print "Extracted $archive_file into $extract_dir\n";
        undef $archive;
    } else {
        print "Failed to extracted $archive_file into $extract_dir\n";
    }
}

解压 C:\Temp\colorbox-master.zip 到 C:\Temp\FREMOTE\TEST\
解压 C:\Temp\FREMOTE\TEST\easybox-v1.3.zip 到 C:\Temp\FREMOTE\TEST\testb\

请注意,我刚刚安装了“Archive::Any-0.0932”模块(ActiveState Perl),所以我可能有不同的(固定)版本。您可能需要检查您的模块是否为最新版本。并且您的 zip 文件没有损坏。

于 2013-03-26T02:30:12.200 回答