Problem beim Auslesen vom Ordner und Unterordnern plus Dateien



  • Hallo erstmal,
    mein erster Beitrag also nicht gleich so hart mit mir ins Gericht gehen 😉

    Ich hab folgendes Problem mit meinem Code:

    void __fastcall Tfrm_Main::listeerstellen(AnsiString Pfad)
    {
     TSearchRec SR;
     if(FindFirst(Pfad+"\\*",faAnyFile,SR) == 0){
       if((SR.Attr == faDirectory) && (SR.Name[1] != '.'))
         listeerstellen(Pfad + "\\" + SR.Name);
       else{//else
         Datei_eintragen(Pfad+"\\"+SR.Name);
         while(FindNext(SR) == 0){//while
           if((SR.Attr == faDirectory) && (SR.Name != ".") && (SR.Name != "..")){
             frm_Main->lb_Ordner->Items->Add(Pfad + "\\" + SR.Name);
             listeerstellen(Pfad + "\\" + SR.Name);
            }
           else
             Datei_eintragen(Pfad+"\\"+SR.Name);
          }//while
         }//else
        FindClose(SR);
      }
    }
    

    Ich benutze im Moment diese Code dafür. Es klappt auch recht gut jedoch gibt es manche Ordner nicht als Ordner erkannt werden. Ich weiß nicht ob das en Fehler im Code ist oder diese Ordner ein andere Attribut als "faDirectory" benutzen.
    Kann mir jemand helfen?
    Ein anderer Code der Funktionietrt und einfach zu verstehen ist würde mir auch helfen.
    Mit freundlichen Grüßen
    Sponky



  • Sponky schrieb:

    jedoch gibt es manche Ordner nicht als Ordner erkannt werden. Ich weiß nicht ob das en Fehler im Code ist oder diese Ordner ein andere Attribut als "faDirectory" benutzen.

    Welche Ordner?



  • Hallo

    Ja dieser Vergleich prüft exklusiv auf das Verzeichnis-Attribut

    SR.Attr == faDirectory
    

    Damit fallen alle Verzeichnisse heraus die zum Beispiel schreibgeschützt oder "archiviert" sind.
    Der korrekte Vergleich ist

    (SR.Attr & faDirectory) == faDirectory
    

    bis bald
    akari



  • Danke akari.
    Genau daran lags. Vielen Dank


Anmelden zum Antworten