Schrift
[thread]7103[/thread]

Readdir funktioniert in schleife nicht: Dateihandelproblem



<< >> 3 Einträge, 1 Seite
Gast Gast
 2005-07-05 00:12
#55979 #55979
Hallo,

ich rufe über eine Schleife immer folgenden Quellcode mit einem Pfad als Parameter auf:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$lPath=$_[0];

if (-d "$lPath")
{
opendir(DIR, "$lPath");
@dir = readdir(DIR);
closedir(DIR);


foreach my $a(@dir)
{
open(FILE, "< $lPath\\$a") || die "Cannot open file: $lPath\\$a - $!";
print <FILE>;
close(FILE);
}

}else {print "ERROR";}


Jetzt hab ich das Problem, dass er mir nur beim ersten Aufruf die Verzeichnisstrucktur über readdir gibt.

Wenn ich die Funktion ein zweites mal aufrufe, gibt er mir diese nicht mehr zurück und das Array @dir ist leer. Obwohl dieses gefüllt sein muss.

Das merkwürdige ist, wenn ich die folgende Zeile aus dem Quellcode lösche, wird das array @dir bei jedem start gefüllt:

Code: (dl )
print <FILE>;


Es muss also irgendwie eine Verbindung bei dem öffnen der Dateien und dem lesen des Verzeichnisses geben. Weiß jemand wieso das nicht funktioniert ?

Gruß Jonas
lichtkind
 2005-07-05 01:13
#55980 #55980
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
ich rate mal das print in combination mit einem filehandler ganz unerwünschte dinge macht
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
esskar
 2005-07-05 01:15
#55981 #55981
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
versuch es mal so

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$lPath=$_[0];

if (-d $lPath) {
my $dir;
if(opendir($dir, $lPath)) {
while(my $filename = readdir $dir) {
next if $filename =~ m!^\.?\.!;

my $file;
    if(open($file, "< $lPath/$a")) {
        print <$file>;
          close $file;
      }
    }
    closedir $dir;
}
} else { print "ERROR" }
\n\n

<!--EDIT|esskar|1120511850-->
<< >> 3 Einträge, 1 Seite



View all threads created 2005-07-05 00:12.