![]() |
Re: Status von FindAllFiles (Suche beendet?)
Das ist eben das Problem bei Rekursion. Man müsste sich quasi einen "Ebenenzähler" einbauen, um festzustellen, wann man wieder im ursprünglichen Verzeichnis angelangt ist.
|
Re: Status von FindAllFiles (Suche beendet?)
Hi,
ich hab die Prozedur ![]() Die Prozedur hat soweit immer funktioniert. zu 2.) da vermute ich mal, das liegt daran, dass cFileName von eine Typ Array of Char oder so ist (so sieht es jedenfalls beim debuggen aus). Ist, wie gesagt aus der Code-Library. zu 3.) hier: Zitat:
MFG Lorenz |
Re: Status von FindAllFiles (Suche beendet?)
Zitat:
Zum anderen: Warum muss man einen Ebenenzähler implementieren? Durch die Rekursion stehen doch alle (von Anfang an) aufgerufenen Funktionen immernoch an der Stelle des Aufrufs, bis diese zurückkehren. Also: Wozu bräuchte man einen Ebenenzähler? /EDIT: Jo, stimmt. Mein 2. und 3. Punkt vom vorherigen Beitrag haben sich erledigt. |
Re: Status von FindAllFiles (Suche beendet?)
Wenn die Funktion das erste Verzeichnis "bis unten" abgearbeitet hat, wie steht dann FFinished?
|
Re: Status von FindAllFiles (Suche beendet?)
Hi,
Das Problem scheint gelöst. :spin2: 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! :hi: MFG Lorenz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz