[C/C++] Verzeichnis mit Unterverzeichnissen auslesen

Buba235

Erfahrenes Mitglied
Hallo!

Ich habe mal eine Frage. Wie kann ich denn unter Linux ein Verzeichnis mit allen Unterverzeichnissen auslesen? Unter Windows ist das ja mit FindFirstFile/FindNextFile zu realisieren, aber wie kann man das unter Linux machen? Hat da jemand eine Idee, Code oder Hinweise/Links?

Danke schon mal
Buba
 
Hallo!

Danke für den Link! So wie ich das sehe ist das ja fast so wie die Funktion scandir(). Nur leider hab ich keine Ahnung wie ich da dann Unterverzeichnisse auslesen soll. Ich bekomme ja immer nur alle Einträge des Verzeichnisses, das ich bei opendir/scandir angegeben habe. Also sowas wie FindNextFile geht da wohl nicht, oder?
 
Hallo!

Danke für den Link! So wie ich das sehe ist das ja fast so wie die Funktion scandir(). Nur leider hab ich keine Ahnung wie ich da dann Unterverzeichnisse auslesen soll. Ich bekomme ja immer nur alle Einträge des Verzeichnisses, das ich bei opendir/scandir angegeben habe. Also sowas wie FindNextFile geht da wohl nicht, oder?
readdir == FindNextFile

Ob das aktuelle dirent Objekt ein Verzeichnis oder eine Datei ist, kannst du mit der stat/lstat Funktion prüfen.

Gruß
 
Hallo!

Jetzt hab ich dennoch ein Problem! Ich finde nur ein Unterverzeichnis und dann bricht er ab. Unter dem gefundenen Verzeichnis ist aber noch eins, welches ich ja auch brauche. Was mach ich denn falsch? Hier mal mein code:

Code:
char apath[1024];
            DIR *dir;
            struct dirent *entry;
            struct stat attribut;

            if ((dir = opendir(sPathUtf8.toUtf8())) != NULL)
            {
                while ((entry = readdir(dir)) != NULL)
                {
                    memset(apath, '\0', sizeof(apath));
                    strcpy(apath, sPathUtf8.toUtf8());
                    strcat(apath, "/");
                    strcat(apath, (*entry).d_name);

                    if (strcmp((char*)entry->d_name, ".") == 0 && strcmp((char*)entry->d_name, ".." ) == 0)
                    {
                        continue;
                    }

                    if (stat(apath, &attribut) == -1)
                    {
                        printf("stat(%s) failed\n", apath);
                    }
                    else if ((attribut.st_mode & S_IFDIR) && strstr(apath, ".") == NULL )
                    {
                        printf("%s\n", apath);
                    }
                }

            }
            else
            {
                printf("opendir(%s) failed\n", sPathUtf8.toUtf8());
            }
            closedir(dir);

Das Verzeichnis ist: /home/name/testcreate/test/anotherdir. Aufgerufen wird der code mit dem Pfad /home/name/testcreate.
 
Zurück