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-12 11:32
#183483 #183483
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Guten Morgen!
Zum Zwecke des Backups benutze ich CPAN:Archive::Zip. Dieses macht aber einen gravierenden Fehler. Und zwar legt es von den gewünschten Verzeichnissen nochmal 0-Byte-Dateien im ZIP an.

Die Original Struktur sieht so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
root
|
homepage1
|
verz1
verz2
verz3
vers4
usw.


in das ZIP sollen nur verz2 und verz4, das ZIP sieht dann so aus:
Code: (dl )
1
2
3
4
5
6
7
8
root
|
homepage1
|
verz2
verz4
Datei "verz2" 0 Byte
Datei "verz4" 0 Byte


Das würde mich ja nicht weiter stören aber es macht das ZIP kaputt. Beim Entpacken des gesamten ZIP bekomme ich Fehler "Fehler beim Schreiben von ...".

Und jetzt kommt das Schlimmste: ich kann den Fehler nicht reproduzieren. Mit gleichem Win 7 64 Bit, gleichem Perl, selber Modulversion, gleichen Verzeichnissen und Dateien bekomme ich den Fehler nur in der Original Umgebung. Woanders nicht.

So sieht der Code aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
my @verzeichnisse = ('/root/homepage1/verz2','/root/homepage1/verz4');
my $zip = Archive::Zip->new();
while (scalar @verzeichnisse) {
    my $verz = shift @verzeichnisse;
    $zip->addTree($verz,$verz,undef,COMPRESSION_LEVEL_BEST_COMPRESSION);
    if ($zip->writeToFileNamed('/zielpfad/datei.zip') != AZ_OK) {
        die "Kann ZIP '/zielpfad/datei.zip' nicht schreiben";
    }
}


In der Doku lese ich dies hier, weiß aber nicht, worauf sich das bezieht:
Quote
Note that you generally don't want to make zip archive member names absolute.

Habe verschiedene Konstellationen im zweiten Parameter ausprobiert aber entweder wird dann garnichts geZIPt oder alles liegt im root.

Hat jemand eine Idee, was da falsch laufen könnte?
10 print "Hallo"
20 goto 10

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