我想以递归方式检索给定路径中包含的所有文件,目录和子目录。但是当我的代码到达第二级(目录中的目录)时我遇到了问题:它不是打开内部目录来搜索其内容,而是抛出错误。这就是我所做的:
void getFile(char *path)
{
DIR *dir;
struct dirent *ent;
if ((dir = opendir(path)) != NULL) {
/* print all the files and directories within directory */
while ((ent = readdir(dir)) != NULL) {
if((strcmp(ent->d_name,"..") != 0) && (strcmp(ent->d_name,".") != 0)){
printf ("%s", ent->d_name);
if(ent->d_type == DT_DIR){
printf("/\n");
getFile(ent->d_name);
}
else{
printf("\n");
}
} // end of if condition
} // end of while loop
closedir (dir);
}
答案 0 :(得分:5)
使用ftw(3)库函数递归遍历文件树。这是非常标准的。
您还可以查看nftw
和MUSL libc来源code for it。它非常易读。
答案 1 :(得分:4)
当您递归调用getFile
时,您只能使用您刚刚阅读的目录名称来调用它。这是不完整路径,这就是您所需要的。你必须自己管理。
这样的事情:
if(ent->d_type == DT_DIR)
{
if ((strlen(path) + strlen(ent->d_name) + 1) > PATH_MAX)
{
printf("Path to long\n");
return;
}
char fullpath[PATH_MAX + 1];
strcpy(fullpath, path);
strcat(fullpath, "/");
strcat(fullpath, ent->d_name); // corrected
getFile(fullpath);
}