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";
    }
}

I got the following error. How do I resolve it?

IO error: write error during copy : Bad file descriptor
 at C:/Perl/site/lib/Archive/Any.pm line 193.
IO error: write error during copy : Bad file descriptor
 at C:/Perl/site/lib/Archive/Any.pm line 193.
IO error: write error during copy : Bad file descriptor
 at C:/Perl/site/lib/Archive/Any.pm line 193.
IO error: write error during copy : Bad file descriptor
 at C:/Perl/site/lib/Archive/Any.pm line 193.
4

1 に答える 1

0

次のコードでテストしました。2 つの既知の正常な zip ファイルを使用して、最初の zip ファイルに 2 番目の zip ファイルを追加しました。元のコードでは、2 番目のファイルの抽出中にエラーが発生し続けました。

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 に答える