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.946 Themen, 20.742 Beiträge
          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
        
