AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Dateien / Laufwerke Delphi Verzeichnisse nach Dateien durchsuchen (mehrere Masken)
Thema durchsuchen
Ansicht
Themen-Optionen

Verzeichnisse nach Dateien durchsuchen (mehrere Masken)

Ein Thema von Aurelius · begonnen am 11. Feb 2008
Antwort Antwort
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#1

Verzeichnisse nach Dateien durchsuchen (mehrere Masken)

  Alt 11. Feb 2008, 07:58
Ich habe noch einen Verbesserungsvorschlag für die rekursive Suche nach Dateien (CodeLib-Beitrag), und zwar das Suchen nach mehreren Masken.
Ich habe das Ganze so gelöst:

Delphi-Quellcode:
procedure FindAllFiles(const FileList: tstrings;RootFolder: string; Maske: array of string; Recurse: Boolean = True);
var
  SR: TSearchRec;
  i : integer;
begin
  RootFolder := IncludeTrailingPathDelimiter(RootFolder);

  if Recurse then
    if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
    try
      repeat
        if SR.Attr and faDirectory = faDirectory then
            // --> ein Verzeichnis wurde gefunden
            // der Verzeichnisname steht in SR.Name
            // der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
            // RootFolder + SR.Name
          if (SR.Name <> '.') and (SR.Name <> '..') then
            FindAllFiles(FileList, RootFolder + SR.Name, Maske, Recurse);
      until FindNext(SR) <> 0;
    finally
      FindClose(SR);
    end;
  i := 0;
  repeat
    begin
      if FindFirst(RootFolder + '*' + Maske[i], faAnyFile, SR) = 0 then
      try
        repeat
          if SR.Attr and faDirectory <> faDirectory then
          begin
            // --> eine Datei wurde gefunden
            // der Dateiname steht in SR.Name
            // der vollständige Dateiname (inkl. Pfadangabe) ist
            // RootFolder + SR.Name
            FileList.Add(RootFolder + SR.Name);
          end;
        until FindNext(SR) <> 0;
      finally
        FindClose(SR);
      end;
      i := i + 1;
    end
  until
    i = high(maske) + 1;
end;
Vergleichswerte:
- Partition mit 52.543 Dateien, 1949 Ordner
- gesucht wurden 11 Masken, insgesamt ~2634 relevante Dateien
- Methode mit 1 Maske, welche dann 11 mal mit untersch. Parametern ausgeführt wurde: 5 Sekunden
- Methode, in der alle Masken als Array übergeben werden: 2 Sekunden

P.S.: ich bin bei meinem Maskenarray davon ausgegangen, dass sie z.b. '.mp3' definiert werden. Daher wird im
if FindFirst(RootFolder + '*' + Maske[i], faAnyFile, SR) = 0 then auch noch das Sternchen ('*') hinzugefügt.

[edit=Matze] Mfg, Matze[/edit]
Jonas
  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 11:07 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