递归查找子目录和文件

时间:2013-04-19 14:58:42

标签: c linux filesystems

我想以递归方式检索给定路径中包含的所有文件,目录和子目录。但是当我的代码到达第二级(目录中的目录)时我遇到了问题:它不是打开内部目录来搜索其内容,而是抛出错误。这就是我所做的:

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);

}

2 个答案:

答案 0 :(得分:5)

使用ftw(3)库函数递归遍历文件树。这是非常标准的。

您还可以查看nftwMUSL 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);
}