Упомянутые вами возможности (а также возможности e.James) кажутся мне более подходящими для сценария оболочки, чем для программы на C ++. Предполагая, что тег "C ++" был преднамеренным, я думаю, что вам, вероятно, было бы лучше использовать POSIX API напрямую:
// warning: untested code.
bool has_subdir(char const *dir) {
std::string dot("."), dotdot("..");
bool found_subdir = false;
DIR *directory;
if (NULL == (directory = opendir(dir)))
return false;
struct dirent *entry;
while (!found_subdir && ((entry = readdir(directory)) != NULL)) {
if (entry->d_name != dot && entry->d_name != dotdot) {
struct stat status;
stat(entry->d_name, &status);
found_subdir = S_ISDIR(status.st_mode);
}
}
closedir(directory);
return found_subdir;
}