Entwickler-Ecke

Dateizugriff - ordner rekursiv nach bestimmten dateien suchen


Luncustaf - Sa 12.04.03 11:14
Titel: ordner rekursiv nach bestimmten dateien suchen
hi,

ich hab hier nene code für das rekursive durchsuchen von ordnern. das klappt aber nur wenn er allgemein nahc allen dateien sucht. ich will aber nur nach zb *.mp3 suchen das er mir alle mp3's auflistet die sich in einem unter ordner befinden.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var Rec:TSearchRec;
begin
   //Die beiden ersten gefundenen Einträge ignorieren
   FindFirst(Dir+'\*.*', faAnyFile,Rec);
   FindNext(Rec); 

   if FindNext(Rec)=0 then 
   begin 
     repeat
       frmzentral.mp3.Add(Dir+'\'+Rec.Name);
       //wenn der Eintrag ein Verzeichnis ist, ebenfalls durchgehen 
       if (Rec.Attr and faDirectory = faDirectory) then
         FindFiles(Dir+'\'+Rec.Name);
     until FindNext(Rec)<>0; 
   end; 
   Findclose(Rec);


ich hab gedacht ich kann das hier ändern


Quelltext
1:
FindFirst(Dir+'\*.*', faAnyFile,Rec);                    


aber das klappt nicht :(

kann mit vllt jemand helfen


gr€€tz


delphiDeveloper - Sa 12.04.03 12:53
Titel: Folgendes Programmfragment sucht rekursiv nach Files
hier werden alle pas Dateien im Verzeichnis (+Unterverzeichnisse) "C:\myDelphiProg" angezeigt.


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:
procedure GetAllFiles(mask: string);
var Search: TSearchrec;
  verz: string;
  such: string;

begin
  such := ExtractFileName(mask);
  verz := ExtractFilepath(mask);
  if verz[length(verz)] <> '\' then verz := verz + '\';
 { alle Dateien suchen }
  if FindFirst(mask, $23, Search) = 0 then
  repeat
      Form1.listbox1.items.add(verz + Search.Name);

  until FindNext(Search) <> 0;
  { Unterverzeichnisse durchsuchen }
  if FindFirst(verz + '*.*', fadirectory, Search) = 0 then
   begin;
    repeat
      if ((search.attr and fadirectory) = fadirectory) and (search.name[1] <> '.') then
        GetAllFiles(verz + Search.Name + '\' + such);
    until FindNext(Search) <> 0;

  end;
  Findclose(Search);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   GetAllFiles('C:\myDelphiProg\*.pas');
end;


Luncustaf - Sa 12.04.03 14:15

cool danke vielmals klappt einwandfrei :D

gr€€tz


wulfskin - So 13.04.03 12:19

Hallo Luncustaf!

Die Idee diese eine Zeile zu ändern ist im Prinzip nicht schlecht. Das Problem ist nur, dass dadurch nur noch Dateien mit dieser Endung angezeigt werden, aber leider keine Verzeichnisse mehr.
Das heisst, du kannst nur in einer Ebene Dateien auflisten lassen. Ansonsten musst du es so machen, wie delphiDeveloper es dir geschrieben hat!

Gruß wulfskin!