Rekursiv Directories ausgeben



  • Hallo,

    das folgende läuft ohne SubSubdirectories problemlos: alle Subdriectories werden aufgelistet. Sobald ein Subdir aber weitere enthält kriege ich ein Zugriffsverletzung. Kann mir jemand helfen? Danke im voraus.

    robi1806

    Spot the mistakes:

    void __fastcall CopyThread::Check4Dirs(AnsiString Dir2Check)
    {
      struct dirent* dentry;
      DIR* dirtoscan = opendir(Dir2Check.c_str());
    
      while((dentry=readdir(dirtoscan))!=NULL)
      {
        if ((strcmp(dentry->d_name, ".")!=0) && (strcmp(dentry->d_name, "..")!=0))
        {
          if (ExtractFileExt(dentry->d_name)=="") //is subdirectory
          {
            OutText=dentry->d_name;  // im Thread definiert
            Synchronize(StatusTextOut);  // schreibt in StatusWindow des anderen Threads
            Check4Dirs(dentry->d_name);
          }
        }
      }
    
      closedir(dirtoscan);
    }
    


  • 1. Ich glaube der rekursive Aufruf stört das DIR !!!
    (Ist bei FindFirst so)

    2. Du solltest nicht Ext=="" testen! Es gibt Ordner MIT Extenmsion und Dateien ohne

    Nimm doch FindFirst / FindNext / FindClose.
    Speicher die gelesenen Subdirs in einer (String-) Liste
    Rekursier erst nach FindClose in gespeicherte Ordner!
    Das klappt ohne Fehler 🙂


Log in to reply