Hi !
Ich brauche für ein Programm eine Dateisuche, das mir beispielsweise alle Dateien mit der Endung TXT in einer ListBox anzeigt.
Mein Problem ist, das die Prozedur die ich gemacht habe, nicht alles findet.
Hier die Prozedur:
procedure TMainForm.SearchFile (Pfad: String);
var sr: TSearchRec;
r: Integer;
begin
r:= FindFirst(Pfad + \'\\*.*\', faAnyFile, sr);
while r = 0 do
begin
if Copy(sr.name, 1, 1) \'.\' then
begin
if (sr.attr0) and (faDirectory0) then
SearchFile(Pfad + \'\\\' + sr.name)
else
if Uppercase(System.Copy(sr.name, Pos(\'.\',sr.name), 4)) = \'.TXT\' then
ListBox.Items.Add(Pfad + \'\\\' + sr.name)
end;
Application.ProcessMessages;
r:=FindNext(sr);
end;
FindClose(sr);
end;
Ich verwende rekursive Programmierung. Meinen Fehler habe ich noch nicht entdeckt. Kann mir jemand helfen ?
Programmieren - alles kontrollieren 4.939 Themen, 20.672 Beiträge
Hi!
Falls sich das bei Delphi nicht geändert (was ich vermute), dann findet FindFirst() bereits den ersten Eintrag. Danach liest du mit FindNext() bereits den zweiten.
Die Abfrage in der While-Anweisung liest dann bereits den dritten Eintrag und dieser wird dann als erster bearbeitet. Du iognorierst also die ersten beiden Einträge.
Soweit ich das Blicke sind die ersten beiden gefundenen Einträge immer die Pseudoverzeichnisse "." und "..". Die gibt es allerdings nur in Unterverzeichnissen. damit stimmt deine Abfrage für Rekursivaufrufe. Im Rootverzeichnis einer Platte dürften dann aber die ersten beiden Einträge des Verzeichnisses ignoriert werden (falls die Suche in einem Rootverzeichnis los geht).
Versteckte Verzeichnisse werden übrigends auch ignoriert (auch solche mit gesetzten Schreibschutz oder System-Attribut, aber das kann ja gewünscht sein). Auf meinem Win98-System tummeln sich massenweise Verzeichnisse mit solchen Attributen...
Bis denn
Andreas