das geht mit FindeFirstFile genauso, wie mit FindFirst aus der Code-Lib. Und das umzuschreiben sollte kein Problem sein. FindFirst, FindNext durch FindFirstFile und FindnextFile ersetzen, Parameter anpassen und die eben den Rückgabewert der
API-Funktionen auswerten.
Ich habe es mal schnell umgeschrieben:
Delphi-Quellcode:
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True);
var
wfd: TWin32FindData;
hFile: THandle;
begin
if AnsiLastChar(RootFolder)^ <> '\' then
RootFolder := RootFolder + '\';
if Recurse then
begin
hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
if hFile <> INVALID_HANDLE_VALUE then
try
repeat
if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
if (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then
FindAllFiles(FileList, RootFolder + wfd.cFileName, Mask, Recurse);
until FindNextFile(hFile, wfd) = False;
finally
windows.FindClose(hFile);
end;
end;
hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
if hFile <> INVALID_HANDLE_VALUE then
try
repeat
if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY then
begin
FileList.Add(RootFolder + wfd.cFileName);
end;
until FindNextFile(hFile, wfd) = False;
finally
Windows.FindClose(hFile);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStrings;
begin
sl := TStringList.Create;
try
FindAllFiles(sl, 'd:\', '*.*', True);
ListBox1.Items := sl;
finally
sl.Free;
end;
end;
Die TStrings wirst du mit einem dynamischen String Array los, aber das solltest du selber hinbekommen.