Как найти подкаталог в каталоге?

Данная программа должна выводить файлы из каталога и подкаталогов. То, что это реализуется с помощью рекурсии - это да. Но у меня возникла проблема с проверкой на папку. А именно с проверкой S_ISDIR. Не совсем могу понять, как это исправить.

int inside = scandir("my_projects/", &namelist, NULL, alphasort);
struct stat buff;
    while (inside--)
      {
     if (stat(namelist[inside]->d_name, &buff) != 0)
        {
          if(S_ISDIR(buff.st_mode)){
             //должен зайти, если папка
          }
          cout << namelist[inside]->d_name << endl;
        }

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Поле d_name содержит имя файла. Чтобы передать его в stat, надо приписать к нему путь до каталога который вы сканировали. А так у вас stat должен сплошные ошибки возвращать.

int inside = scandir("my_projects/", &namelist, NULL, alphasort);
struct stat buff;

while (inside--) {
    string s = string("my_projects/") + namelist[inside]->d_name;
    if (stat(s.c_str(), &buff) == 0) {
        if (S_ISDIR(buff.st_mode)) {
            cout << "d ";
        }
        cout << namelist[inside]->d_name << endl;
    }
}
→ Ссылка