| Autor |
Beitrag |
bbBowser
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 03.07.09 13:18
Hallo alle zusammen,
ich lese per FindFirst und FindNext ein Verzeichnis aus und fülle damit einen TreeView und speichere alles in Stringlisten. Das Problem ist, dass anscheinend nicht jede Datei wirklich gefunden wird, nach meinem Ermessen unabhängig von Name, Grösse usw. - Woran kann das liegen?
Hier noch ein Auszug aus meinem Code:
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 TForm1.IdSendDir(DirPath: string); var SearchResult : TSearchRec; i: integer; begin ExtractStrings(['\','/'], [' '], PChar(DirPath), LastDirsList);
TreeView1.items.AddFirst(nil, LastDirsList.Strings[0]).ImageIndex := 0; i:=1; while i <= LastDirsList.count-1 do begin TreeView1.items.AddChild(TreeView1.items.Item[i-1], LastDirsList.Strings[i]).ImageIndex := 1; i:=i+1; end; setcurrentdir(DirPath); FindFirst('*', faAnyFile, SearchResult); repeat FindNext(searchResult); if searchResult.attr and faDirectory = 16 then begin TreeView1.items.AddChild(TreeView1.items.Item[i-1], searchResult.name).ImageIndex := 1; DirList.Add(searchResult.name); end else begin TreeView1.items.AddChild(TreeView1.items.Item[i-1], searchResult.name).ImageIndex := 2; FileList.Add(searchResult.name); SizeList.Add(inttostr(searchResult.size)); end; until FindNext(searchResult) <> 0;
FindClose(searchResult); TreeView1.items[0].Expand(true); |
thx Carsten
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 03.07.09 13:21
Moin und  im Forum!
Ohne mir den Code genauer angesehen zu haben - was hat dieses FindNext denn da zu suchen?
bbBowser hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| [...] setcurrentdir(DirPath); FindFirst('*', faAnyFile, SearchResult); repeat FindNext(searchResult); if searchResult.attr and faDirectory = 16 then begin TreeView1.items.AddChild(TreeView1.items.Item[i-1], searchResult.name).ImageIndex := 1; DirList.Add(searchResult.name); end else begin TreeView1.items.AddChild(TreeView1.items.Item[i-1], searchResult.name).ImageIndex := 2; FileList.Add(searchResult.name); SizeList.Add(inttostr(searchResult.size)); end; until FindNext(searchResult) <> 0;
FindClose(searchResult); TreeView1.items[0].Expand(true); | |
//EDIT: Weiterhin wertest du das Ergebnis von FindFirst() nicht aus!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
Zuletzt bearbeitet von Narses am Fr 03.07.09 13:26, insgesamt 1-mal bearbeitet
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Fr 03.07.09 13:23
ich weiß leider nicht genau, in welcher Reihenfolge Delphi das auswertet, daher setze ich hier grundsätlich Klammern:
Delphi-Quelltext 1:
| if (searchResult.attr and faDirectory) = 16 then |
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
bbBowser 
Hält's aus hier
Beiträge: 7
|
Verfasst: Fr 03.07.09 13:48
Danke für die Tipps, vorallem das mit dem nicht ausgewerteten FindFirst is mir garnich aufgefallen  . Allerdings hab ich das jetzt korrigiert, sowie die Klammern gesetzt. Trotzdem findet er von rund 22 Dateien(Ordner und Files) nur 18(vorher 17, weil ich das FindFirst vergessen hab). SetCurrentDir hab ich benutzt damit dirpath(zu durchsuchendes Verzeichnis) durchforstet wird. Wenn ich stattdessen FindFirst(DirPath+'\*' ... verwende kommt das selbe Ergebnis raus.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 03.07.09 14:12
Moin!
Ich glaube, du solltest mal bei Luckies DRIVETOOLS reinsehen, bevor wir hier zum x-ten mal den Code einer Directory-Suche analysieren.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Fr 03.07.09 14:15
Falls es immernoch Dateien gibt, die nicht gefunden werden obwohl sie das sind: Sind die vielleicht komprimiert oder verschlüsselt?
Um das auszuschließen kannst du statt faAnyFile mal folgendes einsetzen: Delphi-Quelltext 1: 2:
| const faNewAnyFileEx = $00017FFF; |
Siehe dazu dieser Thread: www.delphipraxis.net...c149497,0,asc,0.html
|
|
Popov
      
Beiträge: 1655
Erhaltene Danke: 13
WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
|
Verfasst: Fr 03.07.09 15:27
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Fr 03.07.09 22:38
|
|