Autor Beitrag
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 31.07.02 09:03 
Um im Dateisystem nach Dateien zu suchen kann man die Methoden FindFirst und FindNext benutzen. Die folgende Funktion FindFiles benutzt diese Methoden um nach Dateien zu suchen. Als Parameter erwartet die Funktion:
  • aPath: String
    Gibt an in welchem Verzeichnis nach Datein gesucht werden soll. Z. B: 'c:\windows'
  • aFindMask: String
    Gibt an nach welchen Dateien gesucht werden soll. Z. B. nach allen Textdateien ('*.txt')
  • aWithSub: Boolean
    Ist der Wert True werden auch alle Unterverzeichnisse durchsucht. Bei False nur das durch aPath angegebene Verzeichnis.
  • aResult: tStrings
    Gibt die Stringliste an in der die Suchergebnisse eingetragen werden. Das könnte z. B. die Eigenschaft Items einer tListbox sein.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
Procedure FindFiles (aPath, aFindMask: String; aWithSub: Boolean; aResult: tStrings);
Var
  FindRec: tSearchRec;
Begin
  // Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist
  // dann raus
  If (aPath = ''or (aFindMask = ''or Not Assigned (aResult) Then
    Exit;

  // Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen
  // (Oder die Funktion  IncludeTrailingPathDelimiter aus der Unit SysUtils.pas verwenden)
  If aPath[Length (aPath)] <> '\' Then
    aPath := aPath + '\';

  // Im aktuellen Verzeichnis nach der Datei suchen
  If FindFirst (aPath + aFindMask, faAnyFile, FindRec) = 0 Then
    Repeat
      If (FindRec.Name <> '.'and (FindRec.Name <> '..'Then
        // ...Ergebnis in die Stringlist einfügen
        aResult.Add (aPath + FindRec.Name);
    Until FindNext (FindRec) <> 0;

  FindClose (FindRec);

  // Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus
  If Not aWithSub Then
    Exit;

  // In Unterverzeichnissen weiter suchen
  If FindFirst (aPath + '*.*', faAnyFile, FindRec) = 0 Then
    Repeat
      If (FindRec.Name <> '.'and (FindRec.Name <> '..'Then
        // Feststellen, ob es sich um ein Verzeichnis handelt
        If Boolean (FindRec.Attr and faDirectory) Then
          // Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion)
          FindFiles (aPath + FindRec.Name, aFindMask, aWithSub, aResult);
    Until FindNext (FindRec) <> 0;

   FindClose (FindRec);
End;

Ein typischer Aufruf könnte so sein:
ausblenden Delphi-Quelltext
1:
FindFiles ('c:\windows''*.txt', True, ListBox1.Items);