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