Durchsuchen von Verzeichnissen kein Recht

Hallo,
ich suche auf einem Laufwerk alle Dateien mit dem Namen "dieseHier.txt"
und durchsuche den Inhalt. Ich scheitere an Verzeichnissen, bei denen
ich kein Leserecht habe :-(
Hier bricht das Skript ab. Es soll aber einfach ignorieren. Ich stehe
auf dem Schlauch.
Danke!!
MaVo
use warnings;
use strict;

# Module einbinden
use IO::Dir;
use IO::File;

my $path =3D 'c:/';
my $logfile =3D "SchreibMit.txt";
my $searchFile=3D"dieseHier.txt";
my $lengthFileName=3D length($searchFile);

our $log =3D new IO::File $logfile, "w"
or error("Kann Logdatei $logfile nicht oeffnen ($!)");

#my [at] files =3D listdir($path, qr#[/\\][^/\\]+\.txt?$#);
my [at] files =3D listdir($path, $searchFile);

my $unknown =3D "Unbekannt";

foreach my $file ( [at] files)
{
# TXT-Datei öffnen
my $txt =3D new IO::File $file, "r"
or error("Kann Datei nicht öffnen");

# Datei einlesen
my $buf =3D "";
while (!eof($txt))
{
my $bbf =3D "";
read($txt, $bbf, 1024);
$buf .=3D $bbf;
}

# ACHTUNG-Datei schließen
close($txt);

my $raute;
if ($buf =3D~ /# Dokumenttyp:+ (\w*\s*\w*)/)
{
$raute =3D $1;
}

else
{
$raute =3D $unknown;
}

$file =3D~ s/(\\$searchFile)//;

print $log $file."\n"."\t"."Dokumenttyp: "."$raute";

if ($buf =3D~ /# verantwortlich:+ (\w*\s*\w*)/)
{
$raute =3D $1;
}

else
{
$raute =3D $unknown;
}
print $log "\t"."Verantwortlich: "."$raute";

if ($buf =3D~ /# Schutzklasse:+ (\w*\s*\w*)/)
{
$raute =3D $1;
}

else
{
$raute =3D $unknown;
}
print $log "\n"."\t"."Schutzklasse: "."$raute"."\n";

}

sub listdir
{
my $dir =3D shift or return;
my $regex =3D shift || undef;

my [at] files;
# my $canRead=3D1;
my $handle =3D new IO::Dir($dir)
or error("sub listdir; Kann Verzeichnis $dir nicht öffnen ($!)");
# or print "Kann Verzeichnis nicht öffnen ($!)";
# $handle =3D new IO::Dir($dir)
# or $canRead=3D0;

# if($canRead =3D=3D 0)
# {
# next;
# }

while (my $file =3D $handle->read)
{
next if $file =3D~ /^\./ || $file =3D~ /_vti_cnf/;

push( [at] files, $dir."\\".$file);
}

my [at] newfiles;
foreach my $file ( [at] files)
{
if (-d $file)
{
push( [at] newfiles, listdir($file, $regex));
}
else
{
next if defined $regex && $file !~ $regex;

push( [at] newfiles, $file);
}
}
return [at] newfiles;

}

sub error
{
print $log "Fehler in der Skriptausführung: [at] _\n";
close($log);
=09
exit(1);
}
MaVo [ Fr, 29 September 2006 07:09 ] [ ID #1483779 ]

Re: Durchsuchen von Verzeichnissen kein Recht

"MaVo" <drvogt [at] web.de> writes:

> Hallo,
> ich suche auf einem Laufwerk alle Dateien mit dem Namen "dieseHier.txt"
> und durchsuche den Inhalt. Ich scheitere an Verzeichnissen, bei denen
> ich kein Leserecht habe :-(
> Hier bricht das Skript ab. Es soll aber einfach ignorieren. Ich stehe
> auf dem Schlauch.

Du sagst doch explizit error(), und diese Funktion ruft wiederum exit
auf.

--
Slaven Rezic - slaven <at> rezic <dot> de
babybike - routeplanner for cyclists in Berlin
handheld (e.g. Compaq iPAQ with Linux) version of bbbike
http://bbbike.sourceforge.net
Slaven Rezic [ Fr, 29 September 2006 08:47 ] [ ID #1483780 ]

Re: Durchsuchen von Verzeichnissen kein Recht

MaVo:

> Hier bricht das Skript ab. Es soll aber einfach ignorieren. Ich stehe
> auf dem Schlauch.

Pack den Code zum Öffnen in ein "eval" und prüfe
nachher $ [at] :

foreach my $file ( [at] files)
{
# TXT-Datei öffnen
eval { <-----
my $txt = new IO::File $file, "r"
or error("Kann Datei nicht öffnen");
}; <-----
nextf if $ [at] ; <----- # $ [at] enthält Fehlertext oder "" wenn
alles ok

Gilt natürlich auch für alle anderen I/O Operationen, bei
denen was schiefgehen kann.

BTW: Das Beispiel macht genau das, was du möchtest.
Ich würde aber zumindest irgendwo protokollieren, auf
welche Verzeichnisse nicht zugegriffen werden konnte,
und was die Ursache war:

(print STDERR "$ [at] \n", next) if $ [at] ;

HTH & LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol [at] adv.magwien.gv.at
Ferry Bolhar [ Fr, 29 September 2006 11:16 ] [ ID #1483784 ]
Perl » de.comp.lang.perl.misc » Durchsuchen von Verzeichnissen kein Recht

Vorheriges Thema: print() on unopened filehandle
Nächstes Thema: perl und Umlaute