AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) FindFirstFile: Mit Maske in Unterverzeichnissen suchen?
Thema durchsuchen
Ansicht
Themen-Optionen

FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

Ein Thema von Dawn87 · begonnen am 25. Nov 2011 · letzter Beitrag vom 25. Nov 2011
Antwort Antwort
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#1

FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

  Alt 25. Nov 2011, 09:05
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!

Beste Grüße,
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#2

AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

  Alt 25. Nov 2011, 09:29
Delphi-Referenz durchsuchenFindFirst/MSDN-Library durchsuchenFindFirstFile sucht nunmal nur in dem angegebenen Verzeichnis und nicht in Unterverzeichnissen.

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

  Alt 25. Nov 2011, 09:41
Meistens gibt es immer mindestens drei Wege
(himi hatte drei Wege beschrieben, und das hier ist der 2. Weg, den er vorgeschlagen hatte )

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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#4

AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

  Alt 25. Nov 2011, 10:23
Hallo,

Danke für die Antworten. Ich denke das bringt mich weiter.

grüße
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: FindFirstFile: Mit Maske in Unterverzeichnissen suchen?

  Alt 25. Nov 2011, 10:25
Hier findest du einen Quelltext von mir, der auch mehrere Masken und Ausschlussmasken usw. unterstützt:
http://www.delphi-library.de/viewtopic.php?p=654795
Am Ende findest du auch eine Liste weiterer ähnlicher Quelltexte. Da sollte etwas Passendes dabei sein.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz