Programmieren - alles kontrollieren 4.939 Themen, 20.672 Beiträge

Delphi 5 - Prozedur für Dateisuche

The_Wise / 7 Antworten / Flachansicht Nickles

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 ?

bei Antwort benachrichtigen
Andreas42 The_Wise „Delphi 5 - Prozedur für Dateisuche“
Optionen

Hi!

Ich hab' im Moment kein Delphi installiert an der Tastatur hängen, aber wenn sich das datei-Attributverarbeiten nicht geändert hat (und wie bei TP geblieben ist), dann ist das Problem deine Erkennung, ob ein Directore gefunden wurde:

if ((sr.attr and faDirectory) = faDirectory) then

sollte die Einträge mit dem Attribut Inhaltsverzeichnis finden.
Da (faDirectory eine Kinstante > 0 ist, ist die Bedingung (faDirectory 0) immer war. Die Prozedur müsste sich also rekursiv starten, wenn ein Dateieintrag mit biliebig gesetzten Attribut gefunden wird.
Deine Prozedur findet bisher IMHO nur Dateien, die kein Attribut gesetzt haben.

Tipp:

Schau dir mal die Funktionen ExtractFileExt() & Co an. Die zerlegen neinen als String übergebenen Pfad mit Dateinamen in die gewünschte Komponente. Soweit ich das sehe, wird deine TXT-Vergleichsfunktion, immer den ersten Punkt im Dateinamen finden finden, dass muss ja mit langen Dateinamen nicht immer der Trenner zum Dateityp sein (wenn ich mich nicht irre).

Ich hoffe, das hilft dir weiter.

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen