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
Borlander mr.escape „Obgleich ich schon lange kein pascal delphi mehr gemacht habe, bin ich aber...“
Optionen

Da hat sich der Fehlerteufel aber wieder böse bei mir zugeschlagen...

(sr.name = '.') or (sr.name = '..')
Macht anders natürlich keinen Sinn.

(sr.attr and faDirectory) = sr.attr then
Solang die Ordner keine Attribute haben funktioniert das so, um auch die Ordner mit Attributen zu finden ist Andreas Code ((sr.attr and faDirectory) = faDirectory) folglich wesentlich besser geeignet.

0
Dass könnte allerdings bei der Überprüfung von mehreren Attributen ärger bereiten...

Meiner meinung nach sollte man auch getrennt nach verzeichnissen und datei suchen
Doppelt suchen bedeutet auch doppelten Plattenzugriff und der ist bekanntlich seeeehr langsam.
Würde vorschlagen stattdessen mit zwei Strings zu arbeiten - einen für die gefundenen Ordner + einen für die Dateien und diese am Ende des Suchdurchlaufs zusammenfügen und als als von der Funktion zurückgeben lassen. Dann hat die Einträge am Ende wie gewünscht getrennt.
Ein einfaches Sortieren (Sorted:=true) der List am Ende finde ich schaft IHMO auch eine gute übersicht.

CU Borlander

bei Antwort benachrichtigen