----- Original Message -----
From: "Dan Jablonsky" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, November 17, 2006 8:55 AM
Subject: problem with tar.gz read
> Hi everybody,
> I guess I still have a problem with my reading of
> tar.gz files. Everything work juuuust great with the
> code below until I happened to hit a corrupted file
> and I can't see a way to jump over it. My point is
> that in a list with hundreds of tar.gz files all of
> them are valid, less one (of small size which also
> happens to be quite at the top of the list) which
> makes the script to go kaboom.
>
> &File::Find::find( sub {
> #traversing a file structure
> if($_ =~/\.tar\.gz/)
> {
> #if you found a tar.gz file - open and read
> #build an Archive::Tar object
> my $tar = Archive::Tar->new($_);
Check that $tar is a true value. (Judging by what you said it *will* be true
even if $_ is corrupt ... so that's not going to help ... but check anyway.)
Otherwise, how about something like:
my $tar = Archive::Tar->new();
eval{ $tar->read($_, 1)};
if($@) {
warn "$_ is a corrupt file: [EMAIL PROTECTED]";
# Don't do anything else with this file
}
else {
> my @files = $tar->list_files() or die "Can't read
> TAR.GZ file!\n";
> #go thru the array and look for the pattern
> foreach my $tar_member (@files)
> {
> if($tar_member =~/$search_pattern/)
> {
> print "\nI FOUND 1 file!\n";
> #must extract the found file from the archive
> $tar->extract_file($tar_member, $some_path);
> }
> }
> }
} # close else block
> }, $search_directory);
>
If the read() succeeds on corrupt files (which I think is unlikely) then you
might have to eval{} some of the other method calls that *are* failing.
Cheers,
Rob
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs