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 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? :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
Peter 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: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!?
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!