Alle Ordner ab einen Verzeichnis in einem TreeView auflisten



  • Hi alle zusammen,

    der Beitrag in der FAQ, der anscheinend dieses Thema behandelt existiert leider nicht mehr, deshalb schreib ich hier diesen Thread!

    Mein Problem ist, ich will ab einem bestimmten Verzeichnis alle Unterverzeichnisse in einem TreeView auflisten! Aber nur die Ordner ohne Dateien. Die Dateien sollen dann bei einem Klick auf den entsprechenden Ordner in einem ListView angezeigt werden.

    Hab hier im Forum auch eine Funktion gefunden, die die Verzeichnisse inklusive Dateien in einem TreeView auflistet! Hier die Funktion:

    DIR *dir;
    char cSubDir[255];
    struct dirent *sdirname;
    
    //Verzeichnis Schritt für schritt auslesen
    if((dir = opendir(cDirPath)) != NULL)
    {
       while((sdirname = readdir(dir)) != NULL)
       {
          if(strcmp(sdirname->d_name, ".") && strcmp(sdirname->d_name, ".."))
          {
             TreeView->Items->AddChild(Node, sdirname->d_name);
    
             strcpy(cSubDir, cDirPath);
             strcat(cSubDir, "\\");
             strcat(cSubDir, sdirname->d_name);
    
             LoadDir(cSubDir, TreeView->Items->Item[TreeView->Items->Count - 1]);
          }
       }
       closedir(dir);
    }
    

    Wie kann ich diese dazu bringen nur die Ordner aufzulisten?

    Und welche wie kann ich dann den Inhalt eines Ordner (nur Dateien) in einem ListView anzeigen?

    Danke schonmal!

    Gruß



  • Ich würde mit FindFirstFile() und FindNextFile() das Verzeichnis durchsuchen und dann nur die Dateien anzeigen, die ein Directory-Attribut haben.

    Sollte ungefähr so aussehen:

    HANDLE dir_handle;
    WIN32_FIND_DATA *fd;
    
    dir_handle = FindDirstFile("c:\\TestDir\\*", &fd);
    FindNextFile(dir_handle, &fd);
    
    while(FindNextFile(dir_handle, &fd))  {
        if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)   {
        //Wenn es sich um ein Verzeichnis handelt...
        TTreeeView->Items->Add(TTreeView->TopItem, fd.cFileName);
    
        }   else   {
        //Wenn es sich um eine Datei handelt kann mit dieser hier gearbeitet werden.
    
        }
    }
    
    FindClose(dir_handle);
    

Anmelden zum Antworten