Autor |
Beitrag |
lb
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: Do 18.03.04 10:14
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 begin path := PCDirectoryListBox.GetItemPath(l) + '\*.par' + #0; if FindFirst(path,faAnyFile,search) = 0 then repeat 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; 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); until Findnext(search) <> 0; 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?
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
Moderiert von Peter Lustig: Code- durch Delphi-Tags ersetzt
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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:
www.delphi-forum.de/viewtopic.php?t=18948
wäre für dich zumindest ein gutes auschauungs-material 
_________________ mfg.
mâximôv
|
|
lb 
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: Sa 20.03.04 14:44
Danke,
Geniale Loesung, wenn ich Zeit habe, werde ich mir das genauer Anschauen
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
lb 
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: So 21.03.04 10:12
Schaue bitte auf Seite,
www.delphi-forum.de/....php?p=137458#137458
mit 2 kleinen Aenderungen hab ich das Programm zum laufen gebracht 
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
lb 
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: 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. 
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: So 21.03.04 14:49
Mit welchen parametern hast du denn welche prozedur aufgerufen? ...bugs würd ich natürlich gern ausbügeln!
_________________ mfg.
mâximôv
|
|
lb 
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: 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.
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: 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
danke!
_________________ mfg.
mâximôv
|
|
lb 
      
Beiträge: 27
Win98, win2000, winxp, linux
D5,Kylix
|
Verfasst: Mo 22.03.04 21:59
Mit diesen Parametern findet Windows 204 und dein Program 190 
_________________ Aus dieser hohlen Gasse muss er kommen
Guesse Lutz
|
|
maximus
      
Beiträge: 896
Win XP, Suse 8.1
Delphi 4/7/8 alles prof
|
Verfasst: Di 23.03.04 01:42
werde mal kucken ob ich den fehler reproduzieren und vernichten kann
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!?
_________________ mfg.
mâximôv
|
|