Для решения только C, пожалуйста, проверьте это. Для этого требуется только дополнительный заголовок:
https://github.com/cxong/tinydir
tinydir_dir dir;
tinydir_open(&dir, "/path/to/dir");
while (dir.has_next)
{
tinydir_file file;
tinydir_readfile(&dir, &file);
printf("%s", file.name);
if (file.is_dir)
{
printf("/");
}
printf("\n");
tinydir_next(&dir);
}
tinydir_close(&dir);
Некоторые преимущества перед другими опциями:
readdir_r
, где доступно, что означает, что он (обычно) threadsafe UNICODE
макросы