Список каталогов сильно различается в зависимости от рассматриваемой ОС / платформы. Это связано с тем, что для достижения этой цели различные операционные системы используют собственные внутренние системные вызовы.
Решением этой проблемы является поиск библиотеки, которая маскирует эту проблему и является переносимой. К сожалению, не существует решения, которое работает на всех платформах без нареканий.
В POSIX-совместимых системах вы можете использовать библиотеку для достижения этой цели, используя код, опубликованный Clayton (на который изначально ссылается книга У. Ричарда Стивенса «Расширенное программирование в UNIX»). Это решение будет работать в системах * NIX, а также в Windows, если у вас установлен Cygwin.
В качестве альтернативы, вы можете написать код для определения базовой ОС, а затем вызвать соответствующую функцию листинга каталогов, которая будет содержать «правильный» способ перечисления структуры каталогов под этой ОС.