#!/usr/bin/perl use strict; use warnings; use 5.010; ########################################################### # Def my @pfade = ("test_archive_broschüre"); # Quelle(n) my $ziel_zip = 'test.zip'; # Zieldatei ########################################################### # Pre say("\n\n\n".('-' x 80)."\ngeht los"); require Encode; require Archive::Zip; $Archive::Zip::UNICODE = 0; # Name "Archive::Zip::UNICODE" used only once... if ($^O =~ /mswin/i) { $Archive::Zip::UNICODE = 1; } Archive::Zip->setErrorHandler( sub { $_[0] =~ s/[ \r\n]$//g; say("FEHLER '$_[0]' mit caller '".join('*',caller)."'"); goto(ENDE); } ); say("Archive::Zip Version: ".(Archive::Zip->VERSION)); ########################################################### { # write ZIP my $zip = Archive::Zip->new(); 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 '..'; my $win_konsole; { # Gegenprobe my $roh = Encode::decode('iso-8859-1',$file); say "Roh: '$roh'"; $win_konsole = Encode::encode('cp850',$roh); say "Win: '$win_konsole'"; } if (-d "$pfad/$file") { push(@pfade,"$pfad/$file"); } else { say("add '$pfad/$file'"); my $file_member = $zip->addFile({ filename => "$pfad/$file", compressionLevel => Archive::Zip::COMPRESSION_LEVEL_FASTEST(), }); } } } } if (!-f $ziel_zip || unlink($ziel_zip)) { unless($zip->writeToFileNamed($ziel_zip) == Archive::Zip::AZ_OK()) { die("Fehler in ".__LINE__); } } else { die("Fehler in ".__LINE__); } } ########################################################### { # read ZIP my $zip = Archive::Zip->new(); if ($zip->read($ziel_zip) == Archive::Zip::AZ_OK()) { if (exists $zip->{members} && scalar(@{$zip->{members}})) { foreach my $ref (@{$zip->{members}}) { my $fn = $ref->{fileName}; say("Dateiname im ZIP: ====> '$fn' <===="); } } else { die("Fehler in ".__LINE__); } } else { die("Fehler in ".__LINE__); } } ########################################################### # End ENDE: say("Fertig\n".('-' x 80));