Entwickler-Ecke
Dateizugriff - ...nach Dateien mit unterschiedlichen Erweiterungen suchen?
Popov - Di 27.01.04 22:11
Titel: GetAllFilesEM
Version 1: GetAllFilesEM
Das
EM steht für
ExtMask. Hier dürfen nur Erweiterungen angegeben werden.
Die Prozedur erwartet vier Parameter:
- Das Verzeichnis (z.B. 'C:\Windows')
- Die vereinfachte Suchmaske (z.B. '*' oder 'bmp' oder 'bmp, jpg, jpeg, gif')
- Die Ausgabeliste (z.B. Listbox1.Items)
- Suche in Unterordnern (bei True werden die auch Unterordner durchsucht; bei False wird nur der Hauptordner beachtet)
Wie man sieht, kann die Maske mehrere Erweiterungen enthalten. Werden mehrere Erweiterungen verwendet, dann bitte die einzelnen Erweiterungen mit Komma trennen. Für alle Daten ein Stern "*" als Suchmaske angeben. Werden Dateien nur eines bestimmten Typs gesucht, dann nur eine Erweiterung angeben, z.B. "EXE".
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:
| procedure GetAllFilesEM(Path, ExtMask: String; List: TStrings; SubFolder: Boolean); var Attrib, k: Integer; Search: TSearchRec; begin Attrib := faArchive + faReadOnly + faHidden;
if Path[Length(Path)] <> '\' then Path := Path + '\';
with TStringList.Create do try CommaText := ExtMask;
for k := 0 to Count - 1 do if FindFirst(Path + '*.' + Strings[k], Attrib, Search) = 0 then repeat List.Add(AnsiUpperCase(Path + Search.Name)); until FindNext(Search) <> 0;
FindClose(Search); finally Free end;
if SubFolder then begin if FindFirst(Path + '*.*', faDirectory, Search) = 0 then begin repeat if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then GetAllFilesEM(Path + Search.Name, ExtMask, List, SubFolder); until FindNext(Search) <> 0;
FindClose(Search); end; end; end; |
Beispiel für Suche nach allen EXE Programmen:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin GetAllFilesEM('c:\programme', 'exe', ListBox1.Items, True); end; |
Beispiel für Suche nach allen Bildern:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin GetAllFilesEM('c:\programme', 'bmp, gif, jpg, ico', ListBox1.Items, True); end; |
Popov - Di 27.01.04 22:12
Titel: GetAllFilesM
Version 2: GetAllFilesM
Das
M steht für
Mask. Hier dürfen Filter in Namen und Erweiterungen angegeben werden.
Die Prozedur erwartet vier Parameter:
- Das Verzeichnis (z.B. 'C:\Windows')
- Die Suchmaske (z.B. '*.*' oder 'a*.bmp' oder 'a*.bmp, b*.jpg, b*.jpeg, c*.gif')
- Die Ausgabeliste (z.B. Listbox1.Items)
- Suche in Unterordnern (bei True werden die auch Unterordner durchsucht; bei False wird nur der Hauptordner beachtet)
Wie man sieht, kann die Maske mehrere Erweiterungen enthalten. Werden mehrere Erweiterungen verwendet, dann bitte die einzelnen Erweiterungen mit Komma trennen. Für alle Daten "*.*" als Suchmaske angeben. Werden Dateien nur eines bestimmten Typs gesucht, dann nur eine Erweiterung angeben, z.B. "*.EXE".
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:
| procedure GetAllFilesM(Path, Mask: String; List: TStrings; SubFolder: Boolean); var Attrib, k: Integer; Search: TSearchRec; begin Attrib := faArchive + faReadOnly + faHidden;
if Path[Length(Path)] <> '\' then Path := Path + '\';
with TStringList.Create do try CommaText := Mask;
for k := 0 to Count - 1 do if FindFirst(Path + Strings[k], Attrib, Search) = 0 then repeat List.Add(AnsiUpperCase(Path + Search.Name)); until FindNext(Search) <> 0;
FindClose(Search); finally Free end;
if SubFolder then begin if FindFirst(Path + '*.*', faDirectory, Search) = 0 then begin repeat if ((Search.Attr and faDirectory) = faDirectory) and (Search.Name[1] <> '.') then GetAllFilesM(Path + Search.Name, Mask, List, SubFolder); until FindNext(Search) <> 0;
FindClose(Search); end; end; end; |
Beispiel für Suche nach allen EXE Programmen die mit einem W anfangen (inc. Unterordner):
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin GetAllFilesM('c:\windows', 'w*.exe', ListBox1.Items, True); end; |
Beispiel für Suche nach allen Bildern die mit einem A anfangen (inc. Unterordner):
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin GetAllFilesM('c:\eigene dateien', 'a*.bmp, a*.jpg, a*.gif', ListBox1.Items, True); end; |
Tipp:
Es ist besser die einzelnen Masken in Anführungszeichen zu setzten. Dadurch vermeidet man, daß bei langen Dateinamen die Parameter falsch verstanden werden. Beispiel:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin GetAllFilesM('c:\eigene dateien', '"a*.bmp", "a*.jpg", "a*.gif"', ListBox1.Items, True); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!