opendir(DIR, "irgendeinverzeichnis");
@files = readdir(DIR);
closedir(DIR);
Vorsicht: das Array enthält die Verzeichnisse "." und "..", ganz am Anfang. Um diese loszuwerden:
shift @files; shift @files;
Man kann auch gleich das Einlesen per regulärem Ausdruck auf bestimmte Dateien beschränken, für .wav-Dateien sieht das z.B. so aus:
opendir(DIR, $dir);
@files = grep { /\.wav$/ } readdir(DIR);
closedir(DIR);
3 Kommentare:
Man sollte bei opendir und den anderen Funktionen noch auf Fehler überprüfen (oder das Pragma "autodie" benutzen).
opendir(DIR,'verzeichnis') or die $!;
Der Code holt übrigens nicht nur Dateien aus dem Verzeichnis, sondern auch Unterverzeichnisse.
Zusätzlich sollten lexikalische Filehandles verwendet werden, weil die "Bareword" Filehandles Probleme bereiten können: http://reneeb-perlblog.blogspot.com/2009/09/verschiedenes-zu-open.html
Man kann auch nicht 100%ig sicher sein, dass '.' und '..' am Anfang des Verzeichnislistings kommen. Perl benutzt da die system-eigene Funktionen. Und da nicht spezifiziert ist, dass die beiden Werte am Anfang kommen müssen, kann es Probleme geben. Bei 99% aller Systemen wird das mit dem shift funktionieren.
Ich würde da ein grep benutzen:
my @entries = grep{ !/^\.\.?$/ }readdir( $dirhandle );
Wäre es auch möglich, aus einem Verzeichnis mit z. Bsp. 100 Dateien, diese gesplittet in jeweils 20 Einträge auszulesen?
foreach(@Eintraege) {
- Datei 1 bis 20
- Datei 21 bis 40
- Datei 41 bis 60
- Datei 61 bis 80
- Datei 81 bis 100
...
}
Dazu würde ich eine zweite Schleife machen:
while((scalar @files) > 0) {
for(my $i=0; $i<20; $i++) {
if ($file = shift(@files)) {
# irgendwas mit der Datei machen
print "$file\n";
}
}
}
Kommentar veröffentlichen