Hallo!!
Wie mkinzler schon sagt, benutze einfach FindFirst und FindNext. Hatten wir schon 1000x im Forum
.. aber ich will ja nicht so sein
Delphi-Quellcode:
procedure GetFilesInDirectory(ResultStringList : TStrings; ADirectory: String; Mask : String = '*.*'; Rekursiv : Boolean = True);
var
F : TSearchRec;
Dir : string;
begin
Dir := IncludeTrailingPathDelimiter(ADirectory);
if (Rekursiv) and
(FindFirst(Dir + '*.*', faAnyFile, F) = 0) then
try
repeat
if (F.Name <> '.') and (F.Name <> '..') and
((F.Attr and faDirectory) = faDirectory) then
GetFilesInDirectory(ResultStringList, Dir + F.Name, Mask, Rekursiv);
until FindNext(F) <> 0;
finally
FindClose(F);
end;
if FindFirst(Dir + Mask, faAnyFile, F) = 0 then
try
repeat
if (F.Name <> '.') and (F.Name <> '..') and
((F.Attr and faDirectory) <> faDirectory) then
ResultStringList.Add(Dir + F.Name);
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
Möchtest Du auch die Verzeichnisse erhalten, ändere den zweiten Teil folgendermaßen um:
Delphi-Quellcode:
[...]
if FindFirst(Dir + Mask, faAnyFile, F) = 0 then
try
repeat
if ((F.Name <> '.') and (F.Name <> '..')) then
ResultStringList.Add(Dir + F.Name);
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
Hoffe es funktioniert so, habe die Prozedur aus meiner eigene Codesammlung kopiert...
SCRaT
//EDIT: Sehe gerade, daß Du Delphi 6 verwendest. Sollte
Dir := IncludeTrailingPathDelimiter(ADirectory);
nicht funktionieren, dann lösche es einfach raus. Die Zeile sorgt lediglich dafür, daß ein übergebener Pfad mit einem Backslash abgeschlossen wird, egal ob z.B. c:\test oder c:\test\ übergeben wird. Müsstest es halt manuell mittels "If Pos..." lösen.