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 The_Wise „Delphi 5 - Prozedur für Dateisuche“
Optionen
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
    { Ich gehe davon aus, dass Du damit die Ergebnisse "." & ".." ausschließen
     willst, damit würden alledings auch alle anderen Ergenisse die mit einem
     Punkt beginnen ausgeschlossen.
     Statt mit Copy(String,1,1) solltest Du String[1] verwenden um das erste
     Zeichen zu ermitteln }
    
if (sr.name = '.') or (sr.name = '.') then begin
        
//if (sr.attr<>0) and (faDirectory<>0) then
        { Die 2. Bedingung ist wie schon von Andreas gepostet immmer wahr. Die
erste wird auch in den meisten fällen wahr ergeben, da jede Datei die
verändert wird das Attribut "Archiv" zugewiesen bekommt als Dateien
in die Listbox werden dann natürlich nur die Dateien übernommen die
keine Attribute haben}
        
if (sr.attr and faDirectory) = sr.attr then
          
SearchFile(Pfad + '\' + sr.name)
        
else if Uppercase(ExtractFileExt(sr.Name)) = '.TXT' then
          
ListBox1.Items.Add(Pfad + '\' + sr.name)
    
end;
    Application.ProcessMessages;
    r:=FindNext(sr);
  
end; //while
  
FindClose(sr);
end;

// CU Borlander

bei Antwort benachrichtigen