Verzeichniss auslesen (nur Dateien)
Sequa
- perl
0 Stefan Muenz0 Sequa
Hallo Zusammen,
ich möchte gerne ein angegebenes Verzeichniss öffnen lassen und nach Dateien durchsuchen lassen... die Zahl der Dateien soll dann weiterverarbeitet weren... das funktioniert auch schon ganz gut, nämlich mit folgendem Code:
opendir(DIR,$verzeichniss);
foreach (readdir(DIR))
{
next if $_ eq ".";
next if $_ eq "..";
$count++;
}
closedir(DIR);
nun, in diesem Falle werden aber auch unterverzeichnisse mitgezählt ("." und ".." habe ich, wie man sieht schon ausgeschlossen)... wenn also in einem Verzeichniss 3 Dateien und 2 Unterverzeichnisse sind, so ist $count auf 5, nicht wie gewünscht auf 3...
wie bekomme ich das ding nun dazu das er mir wirklich nur datein zählt.
Schonmal Danke im Voraus,
Sequa
Hallo Sequa,
wie bekomme ich das ding nun dazu das er mir wirklich nur datein zählt.
foreach (readdir(DIR))
{
next if $_ eq ".";
next if $_ eq "..";
next if -d $_;
$count++;
}
closedir(DIR);
-d ist ein Dateitestoperator und "-d $_" sagt: der aktuelle Eintrag ist ein Verzeichnis.
viele Gruesse
Stefan Muenz
Hallo nochmal,
nunächst mal fühle ich mich ein bisschen geehrt das mir der Chef persönlich antwortet ;)... aber leider funktioniert das nicht so richtig...
opendir(DIR,$dir);
foreach $file (readdir(DIR))
{
if ($file eq ".") {next;}
if ($file eq "..") {next;}
if ( -d "$file" ) {next;}
print "$file<br>";
$count++;
}
closedir(DIR);
weder so, noch mit next if geht es... hab mal $file ausgeben lassen... die "." und ".." ignoriert er... danach kommen die dateien (in dem Fall .htm dateien) und dann das verzeichniss... hier "gfx" ... nur eben das soll ja das Script filtern...
CU Sequa
Hallo,
nunächst mal fühle ich mich ein bisschen geehrt das mir der Chef persönlich antwortet ;)... aber leider funktioniert das nicht so richtig...
opendir(DIR,$dir);
foreach $file (readdir(DIR))
{
if ($file eq ".") {next;}
if ($file eq "..") {next;}
if ( -d "$file" ) {next;}
print "$file<br>";
$count++;
}
closedir(DIR);
Tja, ganz ohne Dokumentationskonsultation wird dann doch nicht gehen;-)
Da -d auf eine Dateizugreift, mußt du auch angeben, wo diese Datei genau zu suchen ist. Wenn Du also mit
opendir(DIR,$dir);
aud das Verzeichnis $dir zugreifst und der Dateiname $filename ist, dann müßte es
if ( -d "$dir/$file" ) {next;}
heißen.
So nebenbei, da du ja überprüfen willst, ob das da ein 'echter' File ist, solltest Du -f anstelle von -d verwenden.
Unter
perldoc -f -X
und
perldoc -f readdir
findest Du näheres.
Grüße
Klaus
Hallo nochmal,
nunächst mal fühle ich mich ein bisschen geehrt das mir der Chef persönlich antwortet ;)... aber leider funktioniert das nicht so richtig...
opendir(DIR,$dir);
besser:
opendir DIR, $dir or die "kann Verzeichnis nicht lesen: $!";
foreach $file (readdir(DIR))
{
[..]
besser:
my $count = 0;
while(defined(my $file = readdir DIR)) {
next unless -f $file;
print $file;
$count++;
}
Peter
Hallo Peter,
opendir(DIR,$dir);
besser:
opendir DIR, $dir or die "kann Verzeichnis nicht lesen: $!";
foreach $file (readdir(DIR))
{
[..]
besser:
my $count = 0;
while(defined(my $file = readdir DIR)) {
next unless -f $file;
print $file;
$count++;
}
Alles schön und gut, nur den Kern des Problems trifft das da nicht, da $file _nicht_ der Pfad zum File ist, solange $dir nicht leer ist:-(
Tja, oft sioeht man den Wald vor lauter Bäume, äh, den Fehler vor lauter Fehlerbehandlungen, nicht:-)
Grüße
Klaus
Alles schön und gut, nur den Kern des Problems trifft das da nicht, da $file _nicht_ der Pfad zum File ist, solange $dir nicht leer ist:-(
Tja, oft sioeht man den Wald vor lauter Bäume, äh, den Fehler vor lauter Fehlerbehandlungen, nicht:-)
Du hast ja so recht ;-)
Peter