Thread Archive::Zip legt Verzeichnisse nochmal als 0-Byte-Dateien an (7 answers)
Opened by bianca at 2016-01-12 11:32

bianca
 2016-01-13 12:43
#183504 #183504
User since
2009-09-13
6978 Artikel
BenutzerIn

user image
Ich hab es gelöst. Und zwar einfach nicht ->addTree() nutzen sondern selbst iterieren und mit ->addFile() adden:
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
#!/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; }
my $add_verzeichnisse = 0;  # 0=selbst iterieren  1=->addTree() verwenden

my @verzeichnisse = ('/webserver/homepage1/verz2','/webserver/homepage1/verz4');
my $zip = Archive::Zip->new();
while (scalar @verzeichnisse) {
    my $verz = shift @verzeichnisse;
    if ($add_verzeichnisse) {
        $zip->addTree($verz,substr($verz,1),undef,COMPRESSION_LEVEL_BEST_COMPRESSION);
    }
    else {
        if (opendir(my $fh,$verz)) {
            foreach my $file (readdir $fh) {
                next if $file eq '.' || $file eq '..';
                if (-d "$verz/$file") {
                    push @verzeichnisse,"$verz/$file";
                    say "neues Verzeichnis '$verz/$file'";
                }
                else {
                    if (open(my $t,'<',"$verz/$file")) {
                        close($t);
                        my $file_member = $zip->addFile({
                            filename            => "$verz/$file",
                            compressionLevel    => COMPRESSION_LEVEL_BEST_COMPRESSION,
                        });
                        say "adde '$verz/$file'";
                    }
                    else { say "$verz/$file nicht lesbar" }
                }
            }
        }
    }
}
if ($zip->writeToFileNamed("/webserver/homepage1/zipziel/zip.zip") != AZ_OK) {
    die "Kann ZIP '/webserver/homepage1/zipziel' nicht schreiben";
}


Mal schauen, ob Fred Moyer sich trotzdem noch meldet. Aber ich hab zumindest mal eine lauffähige Lösung.
Danke allen Mitdenkern!
10 print "Hallo"
20 goto 10

View full thread Archive::Zip legt Verzeichnisse nochmal als 0-Byte-Dateien an