Qrealm.com


Tutorial: Schreiben Sie Ihre eigene Findfiles Werkzeug

Wie Findfirst und Findnext mit Rekursion verwenden, für das Hinzufügen von Dateinamen und Pfade zu einem string

Wie, um eine Liste der Dateien in einem Ordner und dessen Unterordner erstellen

In der folgenden kurzen Tutorial, werde ich Ihnen die Grundlagen zeigen zum Schreiben eigener "Dateien suchen" Werkzeug.

Die Prozedur Findfiles (FilesList, startdir, filemask) die Dateien findet in einem bestimmten Ordner und dessen Unterordner. Die Dateien entsprechen einem filemask, die Sie angeben.

Parameter FilesList ist ein string der volle Pfade der Dateien hinzugefügt werden.

In Parameter startdir Sie den Start Verzeichnis (Ordner) übergeben, einschließlich der Festplatte. Wenn Sie eine ganze Festplatte gesucht werden soll, das Stammverzeichnis dieser Festplatte legen Sie fest, wie zum Beispiel C: \ oder A: \

In Parameter filemask Sie den Namen der Datei zu finden, oder einer Datei-Maske mit Platzhaltern übergeben (mit * und?). Beispiele:

Findfiles (FilesList, "c: \", "letter01.doc ');
Findfiles (FilesList, "c: \", "* .dpr ');
Findfiles (FilesList, 'd: \ Projekte "," Test ?? dpr.');

Wenn Sie diesen Vorgang versuchen möchten, fügen Sie die folgenden Komponenten zu einem Formular:

  • zwei Edits (eine für den Startadressen, eine für die Maske)
  • eine Taste
  • a TLabel
  • ein ListBox

Der Quellcode von Findfiles

In Findfiles verwenden wir Rekursion: Das Verfahren nennt sich selbst, um die Dateien, die in Unterverzeichnissen befinden, zu finden.

Verfahren Findfiles (FilesList: TStringList;
Startdir, filemask: string);
var
SR: TSearchRec;

DirList: TStringList;
IsFound: Boolean;
i: integer;
start
wenn startdir [Länge (startdir)] <> '\' dann
Startdir: = startdir + '\';

// Erstellen Sie eine Liste der Dateien im Verzeichnis startdir
// Geben Sie keine Verzeichnisse!

IsFound: =
Findfirst (startdir + filemask, faAnyFile-faDirectory, SR) = 0;
während IsFound tun beginnen
FilesList.Add (startdir + SR.Name);
IsFound: = Findnext (SR) = 0;
ende;
Findclose (SR);

// Erstellen Sie eine Liste von Unterverzeichnissen
DirList: = TStringList.Create;
IsFound: = Findfirst (startdir + '*. *', FaAnyFile, SR) = 0;
während IsFound tun beginnen
if ((SR.Attr und faDirectory) <> 0) und
(SR.Name [1] <> '.') Dann
DirList.Add (startdir + SR.Name);
IsFound: = Findnext (SR) = 0;
ende;
Findclose (SR);

// Scannen Sie die Liste der Unterverzeichnisse rekursiv
for i: = 0 bis DirList.Count-1 zu tun
Findfiles (DirList [i], filemask);

DirList.Free;
ende;

Wie Findfiles verwenden?

Vor dem Aufruf von Findfiles, eine string zu dem Findfiles werden die vollständigen Pfade der Dateien, die gefunden werden, fügen Sie erstellen. Der Inhalt der Stringliste kann in einem Listenfeld, auf Festplatte gespeichert, was auch immer ... Schließlich, diese string frei haben Sie gezeigt werden.

Verfahren TForm1.ButtonFindClick (Sender: TObject);
var
FilesList: TStringList;
start
FilesList: = TStringList.Create;
versuchen
Findfiles (FilesList, EditStartDir.Text, EditFileMask.Text);
ListBox1.Items.Assign (FilesList);
LabelCount.Caption: = 'Dateien gefunden:' + IntToStr (FilesList.Count);
// Andere Verarbeitung mit der Liste der Dateien ...
// ...
als letztes
FilesList.Free;
ende;
ende;