Entwickler-Ecke
Dateizugriff - Verzeichnisinhalt rekursiv(!) auflisten
n-regen - Sa 13.09.08 17:38
Titel: Verzeichnisinhalt rekursiv(!) auflisten
Hallo!
Ich weiß sehr wohl, dass es hunderte von Themen in den verschiedensten Foren gibt, die zeigen, wie man die Dateien in einem Verzeichnis auflistet.
Ich brauche aber eine Funktion, die alle Dateien in einem Verzeichnis und seinen Unterordnern auflistet, die einer bestimmten Suchmaske entsprechen.
Meine Prozedur "Marke Eigenbau" versagt dabei kläglich:
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:
| procedure ListFileDir(Path: string; FileList: TStrings; Recursive: Boolean); var SR: TSearchRec; begin if Path[length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + jvedit2.Text, faAnyFile, SR) = 0 then begin repeat if (SR.Attr <> faDirectory) then begin FileList.Add(Path+SR.Name); end else begin if recursive then begin if sr.Name[length(sr.Name)] <> '\' then ListFileDir(Path+sr.Name+'\', FileList, true) else ListFileDir(Path+sr.Name, FileList, true); end; end; until FindNext(SR) <> 0; FindClose(SR); end; end; |
Boldar - Sa 13.09.08 17:48
Sorry, meine Kristallkugel hat grad nen Sprung^^
Was passiert denn? Was für eine Fehlermeldung?
Guck mal im debugger welcher Zweig der inneren if-Abfrage durchlaufen wird!
n-regen - Sa 13.09.08 18:08
Ich habe jetzt eine Lösung gefunden:
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:
| procedure ListFileDir(Path: string; FileList: TStrings; Recursive: Boolean); var SR,SR2: TSearchRec; begin if Path[length(Path)] <> '\' then Path := Path + '\'; if FindFirst(Path + jvedit2.Text, faAnyFile, SR) = 0 then begin repeat if (SR.Attr <> faDirectory) then begin FileList.Add(Path+SR.Name); end; until FindNext(SR) <> 0; FindClose(SR); end; if recursive then begin if FindFirst(Path+'*', faAnyFile, SR2) = 0 then begin repeat if (SR2.Attr = faDirectory) then begin showmessage(sr2.Name); if (sr2.Name <> '.') and (sr2.Name <> '..') then begin if sr2.Name[length(sr2.Name)] <> '\' then ListFileDir(Path+sr2.Name+'\', FileList, true) else ListFileDir(Path+sr2.Name, FileList, true); end; end; until FindNext(SR2) <> 0; FindClose(SR2); end; end; end; |
Bitte achtet nicht so sehr auf meinen Programmierstil - Hauptsache, es funktioniert ;-)
Und Danke, dass du uns mit deiner Ironie erheitert hast.
n-regen - Fr 28.05.10 12:08
Da ich diese Funktion in den letzten Tagen mehrmals gebraucht habe, habe ich sie nochmal überarbeitet:
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:
| uses SysUtils, Classes;
procedure DateienAuflisten(Pfad: string; DateiListe: TStrings; Rekursiv: Boolean = true; Suchmaske: string = '*'); var SR1, SR2: TSearchRec; begin if Pfad[Length(Pfad)] <> '\' then Pfad := Pfad + '\'; if FindFirst(Pfad + Suchmaske, faAnyFile, SR1) = 0 then begin repeat if (SR1.Attr <> faDirectory) then DateiListe.Add(Pfad+SR1.Name); until FindNext(SR1) <> 0; FindClose(SR1); end; if Rekursiv then begin if FindFirst(Pfad+'*', faAnyFile, SR2) = 0 then begin repeat if (SR2.Attr = faDirectory) and (SR2.Name <> '.') and (SR2.Name <> '..') then DateienAuflisten(Pfad+SR2.Name, DateiListe, true); until FindNext(SR2) <> 0; FindClose(SR2); end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!