#include #include #include using namespace std; char* path_add(const char* initial, const char* d_name, char *path){ strcpy(path, initial); strcat(path, "/"); strcat(path, d_name); return path; } void traverse(const char* dpath, const char *extension){ DIR *dir = opendir(dpath); struct dirent *de; char path[512]; while(1){ de = readdir(dir); if(!de) break; if(DT_DIR == de->d_type) { if(de->d_name[0] == '.' && (de->d_name[1] == '.' || de->d_name[1] == 0)) continue; traverse(path_add(dpath, de->d_name, path), extension); } else if(DT_REG == de->d_type) { if(!extension || (!strcmp(extension, de->d_name + strlen(de->d_name) - strlen(extension)))){ cout << path_add(dpath, de->d_name, path) << endl; } } } } int main(int argc, char ** argv){ if(argc > 1){ traverse(".", argv[1]); } else traverse(".", 0); return 0; }