Moin,
hier gibt es ein schönes Beispiel, wie man rekursiv nach Dateien suchen kann. Ich benutze diese Procedure in einer Abwandelung, den ich möchte nach mehreren Masken suchen und die Datein nur zähen, nicht auflisten (zumindestens nicht in einer ListBox oder ählichem, ich speichere die DateiInfo in einem Array). Deshalb habe ich erstmal etwas getestet. Der interessante Teil ist das hier:
Delphi-Quellcode:
if FindFirst(Directory + Mask, faAnyFile and not faDirectory, SR) = 0 then // Mask := '*.mp3';
try
repeat
{ * Datei-Counter um "1" erhöhen * }
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
Die Procedure erfüllt (anscheinend) ihren Zweck und zählt, wenn ich das ganze durch meinen iTunes Ordner laufen lasse, 15325 MP3-Dateien.
Nun kommt die Modifizierte Funktion. Meine Idee war es, einfach alle Dateien (daher auch keine eindeutige Mask, sondern '*.*') und dann später die DateiEndung zu extrahieren und mit einer Liste zu vergleichen. Dazu wollte ich etwas testen und habe das ganze so umgeschrieben:
Delphi-Quellcode:
if FindFirst(Directory + '*.*', faAnyFile and not faDirectory, SR) = 0 then
try
repeat
if ExtractFileExt(SR.Name) = '.mp3' then
begin
{ * Datei-Counter um "1" erhöhen * }
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
Diese Funktion liefert auch etwas zurück, allerdings einen anderen Wert. Sie zählt "nur" 15312 Dateien.
Also 13 Dateien weniger als die "Original Procedure". Ich konnte bis jetzt nicht herausfinden warum. Meine einzige Vermutung war, das vllt. ein Album (kommt mit 13 Dateien ja ziemlich gut hin) einen "Fehler" hat. Also das die Datei z.B. "01 Intro.txt.mp3" heißt und FindFirst die "Richtige Endung" findet, also *.mp3 und ExtractFileExt auf das *.txt kommt und daher diese Datei ausschließt. Allerdings ist das schon ziemlich weit hergeholt...
Ich hoffe ihr habt vllt. eine Idee
Grüße,
Lukas