Как в c++ рекурсивно напечатать названия всех файлов в директории, переданной параметром программе? Например, для следующей структуры
--project
---src
----main.cpp
---include
----stdafx.h
---debug
----main
---Makefile
надо, чтобы вызов debug/main . печатал названия всех файлов проекта.
Только Linux (если понравится):
// g++ -Wall -Wpedantic writedir.cpp
# include <errno.h>
# include <sys/types.h>
# include <dirent.h>
# include <iostream>
# include <string.h>
void showdir(char const * dirname,int depth){
errno = 0 ;
DIR * dir = opendir(dirname);
if(errno) return;
struct dirent * result;
do{
result = readdir(dir);
if(not result) break;
for(int i=depth;i>0;){--i;std::cout<<"-";}
std::cout<<result->d_name<<"\n";
if( (strcmp(result->d_name,".") not_eq 0) and
(strcmp(result->d_name,"..") not_eq 0))
showdir(result->d_name,depth+1);
}while(true);
closedir(dir);}
int main(){
showdir(".",0);
return 0;}
Имея под боком std::filesystem из C++17 проблема по сути решается одним единственным циклом с recursive_directory_iterator:
for(auto& p: fs::recursive_directory_iterator("project"))
std::cout << p << '\n';
Для проверки см. тут.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости