![]() |
FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
Guten Morgen,
ich muss zurzeit folgende Aufgabe lösen: Vom Anwender bekomme ich den Pfad zu einer Ordnerstruktur, die in den meisten Fällen auch Unterordner enthält. Irgendwo in dieser Struktur muss eine Datei von einem bestimmten Typ liegen, damit diese Auswahl von meiner Anwendung akzeptiert wird. Die Überprüfung ob eine Datei von diesem Typ vorhanden ist, habe ich mit einer rekursiven Funktion die intern FindFirstFile und FindNextFile nutzt, implementiert. Das Funktioniert auch, solange auf der ersten Ordnernebene eine Datei vorhanden ist die der Dateimaske ("*.abc"), die ich FindFirstFile() übergeben habe, entspricht. Wenn in einem Unterverzeichnis diese Datei vorhanden ist, liefert FindFirstFile den Wert INVALID_HANDLE_VALUE. Eine Möglichkeit das Problem zu lösen, wäre als Dateimaske "*.*" anzugeben und die Suchergebnisse per ExtractFileExt() selbst zu filtern. Das dauert aber länger und ist von Codee-Estetik her eher keine Mona Lisa. Mein Problem wäre auch gelöst, wenn FindFirstFile einfach nur die Unterordner zurückliefern würde, auch wenn keine Datei vorhanden ist. Ich kenne aber keine Möglichkeit die Funktion entsprechend zu parametisieren. Für Lösungsvorschläge bin ich dankbar. Unter allen Antwortenden verlose ich ein paar Smilies! :P Beste Grüße, Stefan |
AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
![]() ![]() Es gibt also zwei grundsätzliche Wege: - die Verzeichnisse mit *.* durchsuchen und die Dateien nochmal selber auf diese maske zu Vergleichen, gefundene Unterverzeichnisse dann jeweils ebenfalls dieser Suche zu unterwerfen usw. - erstmal mit dem angegebenen Suchmuster die nur Dateien suchen, anschließend nochmals mit *.* nur die Verzeicnisse suchen und jeweils in diesen ebenfalls die Suche neu beginnen. Oder einfach mal nach FindAllFiles suchen, was einem übrigens auch die DP-Suchfunktion und Google genannte hätten, wenn man z.B. mal nach "Dateien suchen in allen Unterverzeichnissen" oder "Datei suchen Unterverzeichnisse" gesucht hätte. :angle2: |
AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
Meistens gibt es immer mindestens drei Wege :mrgreen:
(himi hatte drei Wege beschrieben, und das hier ist der 2. Weg, den er vorgeschlagen hatte :oops: ) Hier der dritte Weg:
Delphi-Quellcode:
procedure FindFiles( const Path, Filter : string; const Results : TStrings; Recurse : Boolean = False );
begin // Wir suchen mal nach den Dateien wie gewohnt mit FindFirst/FindNext/FindClose ... // ok, alle gefundenen Dateien sollten jetzt in Results liegen // Sollen wir die Verzeichnisse auch noch durchsuchen? if Recurse then begin // Jetzt suchen wir ausschließlich nach Verzeichnissen if FindFirst( Path, ... ) = 0 then try repeat // Rekursiver Aufruf dieser procedure FindFiles( IncludeTrailingPathDelimiter( Path ) + SearchRec.Name, Filter, Results, Recurse ); until FindNext( SearchRec ) <> 0; finally FindClose( SearchRec ); end; end; end; |
AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
Hallo,
Danke für die Antworten. Ich denke das bringt mich weiter. grüße Stefan |
AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
Hier findest du einen Quelltext von mir, der auch mehrere Masken und Ausschlussmasken usw. unterstützt:
![]() Am Ende findest du auch eine Liste weiterer ähnlicher Quelltexte. Da sollte etwas Passendes dabei sein. ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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