Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Dateien in allen Unterordnern suchen


lb - Do 18.03.04 10:14
Titel: Dateien in allen Unterordnern suchen
Hi,

Ich moechte gerne aus einem selectierten Ordner alle Dateien finden, die z. B eine par Extension haben (*.par). Ich bin soweit gekommen, dass alle Ordner eine Ebene unter dem aktuellen durchsucht werden.

Hier der Code:


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:
for l := PCDirectoryListBox.ItemIndex  to ItemsCount  do     //Laufe durch alle Untergeordneten Ordner
begin
 path := PCDirectoryListBox.GetItemPath(l) + '\*.par' + #0;  //setze Pfad gemaess 'l'
 if FindFirst(path,faAnyFile,search) = 0 then repeat   //finde erste Datei
  date_and_time := FileDateToDateTime(search.Time);
  i := 0;
  part_string := '     ';
  while search.Name[i] <> '.' do Inc(i);
  k := 4;
  for j := i-1 downto 1 do
  begin
   part_string[k] := search.Name[j];
   Dec(k);
  end;
 //addiere gefundene Datei zu einer ListBox
 PCListBox.items.add(part_string+' '+DateToStr(Trunc(date_and_time))+' '+TimeToStr(date_and_time));
  file_list[PCListBox.items.count-1].search_rec := search;
  file_list[PCListBox.items.count-1].part_id := string_to_part_id(part_string);
  file_list[PClistBox.Items.count-1].Directory := PCDirectoryListbox.GetItemPath(l); //160304lb new line

 until Findnext(search) <> 0//Suche naechste Datei
 FindClose(search);
end;


Ich denke man kann alle Unterordner von Unterordnern auf diese Weise durchsuchen, doch giebt es in Delpie nicht eine eingebaute Funktion, mit der man das machen kann? :roll:

Im Delphi selbst gibt es ja ein Search tool, welches ebenfalls alle Dateien in allen Unterordnern nach einem String durchsucht!!!

Bin dankbar um jede Hilfe :D

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


maximus - Do 18.03.04 11:01

Moin.

Eine delphi-eigene funktion kenn ich nicht, aber du kannst es recht leicht mit rekursion erreichen, oder du verwendest meine unit aus dem 'opensource units' bereich, in der ich eben dieses verhalten gekapselt habe:

http://www.delphi-forum.de/viewtopic.php?t=18948

wäre für dich zumindest ein gutes auschauungs-material :wink:


lb - Sa 20.03.04 14:44

Danke,

Geniale Loesung, wenn ich Zeit habe, werde ich mir das genauer Anschauen


lb - So 21.03.04 10:12

Schaue bitte auf Seite,

http://www.delphi-forum.de/viewtopic.php?p=137458#137458

mit 2 kleinen Aenderungen hab ich das Programm zum laufen gebracht :lol:


lb - So 21.03.04 10:58

Hi,

Ich habe gerade das Programm verglichen, mit 'Find Files' von Windows. Es findet nicht alle Files! Also irgendwas stimmt da noch nicht ganz. :(


maximus - So 21.03.04 14:49

Mit welchen parametern hast du denn welche prozedur aufgerufen? ...bugs würd ich natürlich gern ausbügeln!


lb - So 21.03.04 22:03

Folgende Parameter:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  Memo1.Lines.Clear;
  FileListBox1.Clear;

  // Der 'levels' parameter gibt an auf wievielen verzeichniss-ebenen gesucht wird
  // bei -1 werden alle durchsucht
  if DirectoryListBox1.ItemIndex = 0 then filename := DirectoryListBox1.Directory + Edit1.Text
  else filename :=  DirectoryListBox1.Directory + '\' + Edit1.Text;


  n := getDirTreeFiles(filename, FileFoundHandler, [faDirectory, faArchive], 10);  // suche starten

  Memo1.Lines.Add(#13#10 + intToStr(n) + ' items found.');
  edit2.Text := intToStr(n) + ' items found.';


bei 4 sind es natuerlich zu wenig, aber bei 10 und 15 auch. Windows findet z.B 251 '*.par' files auf c:\, wobei dein Program nur
229 findet, unabhaengig ob der level parameter 10 oder 15 ist.


maximus - Mo 22.03.04 13:05

hi.


Hast du den levels-parameter mal mit -1 getestet? ...glaube aber es liegt an den attributen [faDirectory, faArchive] sind natürlich nicht alle.


Delphi-Quelltext
1:
n := getDirTreeFiles(filename, FileFoundHandler, [faAnyFile], -1);                    


sollte eigentlich alle finden. Teste das mal bitte :D

danke!


lb - Mo 22.03.04 21:59

Mit diesen Parametern findet Windows 204 und dein Program 190 :evil:


maximus - Di 23.03.04 01:42

werde mal kucken ob ich den fehler reproduzieren und vernichten kann :wink:


PS: Hab grad festgestellt, dass windows auch in zip-dateien sucht und deshalb wesentlich mehr findet. Schau mal bitte, ob in dem baum zips liegen, in denen entsprechende dateien sind!?