Thread Archive::Zip Fehlermeldungen (11 answers)
Opened by bianca at 2016-01-29 09:36

bianca
 2016-01-30 07:54
#183679 #183679
User since
2009-09-13
6977 Artikel
BenutzerIn

user image
2016-01-29T12:01:36 GwenDragon
Eigentlich kannst du mit Archive::Zip::setErrorHandler() deine eigene Routine zur Fehlerausgabe nehmen.

Hatte ich nicht gesehen, tur mir leid. Du bist mal wieder die Aufmerksamste. DANKE DIR!!!

Der Vollständigkeit halber zugunsten der Nachwelt kann man das mit folgendem Code testen :)
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
if ($^O =~ /mswin/i) { $Archive::Zip::UNICODE = 1; }

# Zufallsdateien erzeugen
say '-' x 80;
my $nr = 1;
$nr ++ while -e "test$nr";
mkdir("test$nr");
for (my $fnr = 1; $fnr < 11; $fnr ++) {
    open(my $fh,'>',"test$nr/testdatei$fnr.txt");
    my $count = int(rand((9000)+1))+100;
    for (my $x = 0; $x < $count; $x ++) { print $fh chr(int(rand((25)+1))+65); }
    close($fh);
}

# ZIPpen
my $zip = Archive::Zip->new();
my $error = '';
Archive::Zip::setErrorHandler(  # auskommentieren um das ursprüngliche
    sub{                        # und jetzt gelöste Problem zu sehen
        chomp($_[0]);
        $error = "FEHLER '$_[0]'";
    }
);
mkdir('archive_zip_temp') if !-e 'archive_zip_temp';
Archive::Zip::tempFile('archive_zip_temp');
my @pfade = ("test$nr");
my $flag = 0;   # 0=wilde Fehlermeldungen erzeugen / sonst 1
while (scalar @pfade) {
    my $pfad = shift @pfade;
    if (opendir(my $fh,$pfad)) {
        foreach my $file (sort {$a cmp $b} readdir $fh) {
            next if $file eq '.' || $file eq '..';
            if (-d "$pfad/$file") {
                push @pfade,"$pfad/$file";
            }
            else {
                if (open(my $t,'<',"$pfad/$file")) {
                    close($t);
                    my $file_member = $zip->addFile({
                        filename            => "$pfad/$file",
                        compressionLevel    => 7,
                    });
                    if (!$flag) {
                        unlink("$pfad/$file");  # mitten im Vorgang Dateien entziehen...
                        $flag = 1;
                    }
                    say "add '$pfad/$file'";
                }
                else { say "$pfad/$file nicht lesbar" }
            }
        }
    }
    else { say "$pfad -> $! in ".__LINE__.' -> wird ignoriert, darum geht es im Moment nicht'; }
}
say '-' x 80;
say "Endergebnis: ".$zip->writeToFileNamed('test.zip');
say '-' x 80;
if ($error ne '') { say $error; }
else { say 'OK'; }
10 print "Hallo"
20 goto 10

View full thread Archive::Zip Fehlermeldungen