Autor Beitrag
n-regen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202
Erhaltene Danke: 2



BeitragVerfasst: Sa 13.09.08 17:38 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202
Erhaltene Danke: 2



BeitragVerfasst: Sa 13.09.08 18:08 
Ich habe jetzt eine Lösung gefunden:
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:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 202
Erhaltene Danke: 2



BeitragVerfasst: Fr 28.05.10 12:08 
Da ich diese Funktion in den letzten Tagen mehrmals gebraucht habe, habe ich sie nochmal überarbeitet:
ausblenden 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;

Für diesen Beitrag haben gedankt: guinnes, Jakane