Programmieren - alles kontrollieren 4.937 Themen, 20.662 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
mr.escape Borlander „ procedure TMainForm.SearchFile Pfad: String var sr: TSearchRec r: Integer begin...“
Optionen

Obgleich ich schon lange kein pascal(delphi) mehr gemacht habe, bin ich aber öfter mit dateisuchfunktionen beschäftigt und kenne einige der tücken (stichwort rekursion und suchmaske).
Davon unabhängig müssten einige codeteile aber anders aussehen:

if (sr.name = '.') or (sr.name = '.') then begin

wird zu
if (sr.name = '.') or (sr.name = '..') then begin

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

zu
if (sr.attr and faDirectory)  0 then


Meiner meinung nach sollte man auch getrennt nach verzeichnissen und datei suchen, da man dort die suchmasken gleich richtig setzen kann.
D.h.:

suche alle verzeichnisse mit *.* in diesem ordner und rekursiere jeweils hinein
suche danach alle dateien mit *.ext und kehre danach eine ebene zurück

Der grund ist, dass so die dateien eines ordners zusammen bleiben und nicht andere "tiefere" dateien sich in die liste dazwischen mischen.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen