Hi,
Das Problem scheint gelöst.
Hab den Code ein bisschen umgestellt und frage jetzt nur noch FCancelled ab, bei dem rekursiven Aufruf.
Wenn der Benutzer Abbrechen drückt, wird noch der aktuelle Ordner fertig durchsucht und dann die Prozedur beendet.
Delphi-Quellcode:
procedure TForm_Main.FindAllFiles(RootFolder: String; Mask: String = '*.*'; Recurse: Boolean = true);
var
wfd : TWin32FindData;
hFile : THandle;
begin
if (AnsiLastChar(RootFolder)^ <> '\') then
RootFolder := RootFolder + '\';
if Recurse and not FCancelled then
begin
hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
try
if (hFile <> INVALID_HANDLE_VALUE) and not FCancelled then
begin
repeat
if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) then
if (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') then
FindAllFiles(RootFolder + wfd.cFileName, Mask, Recurse);
until FindNextFile(hFile, wfd) = False;
end; (* of if *)
finally
Windows.FindClose(hFile);
end;
end; (* of if *)
hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
try
if (hFile <> INVALID_HANDLE_VALUE) and not FCancelled then
begin
repeat
if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY) then
begin
//Bearbeitung
if (LowerCase(ExtractFileExt(wfd.cFileName)) = Copy(Mask, 2, Length(Mask) - 1)) then
AddFileInfo(RootFolder + wfd.cFileName);
Application.ProcessMessages;
end; (* of if *)
until FindNextFile(hFile, wfd) = False;
end; (* of if *)
finally
Windows.FindClose(hFile);
end;
end;
Vielen Dank an alle!
MFG
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.
George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler