1

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

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

}
4

2 回答 2

5

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

您还可以查看它nftwMUSL libc代码。它的可读性很强。

于 2013-04-19T15:13:33.243 回答
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);
}
于 2013-04-19T15:01:33.780 回答