c/c++语言开发共享c:返回目录中的所有文件名

如何编写一个函数来返回包含子目录中文件的目录中的所有文件名。 到目前为止,我有类似的东西,但它不能正常工作,我尝试调用此函数并打印出每个元素,它只打印第一个元素。

谁能告诉我我做错了什么或者写这个函数的其他方法?

char **allFiles(char *dir, OPTIONS opts) { char **allfiles = malloc(sizeof(char **)); struct dirent *dp; while((dp = readdir(dirp)) != NULL) { if (strcmp(dp->d_name, ".") == 0 || strcmp(dp->d_name, "..") == 0) continue; if (dp->d_type == DT_DIR) allfiles = allFiles(strcat(strcat(dir, "/"), dp->d_name)); if (dp->d_type != DT_DIR) *allfiles = strdup(strcat(strcat(strdup(dir), "/"), dp->d_name)); ++allfiles; } closedir(dirp); return allfiles; } 

    allfiles []数组由父级和递归子级填充。 子项插入其中,但结果被父项覆盖。

    更新:重读后,我看到数组管理看起来很好(除了可能超出它的结束)也许你用完了文件描述符?

    UPDATE2:替换

     if (dp->d_type != DT_DIR) *allfiles = strdup(strcat(strcat(strdup(dir), "/"), dp->d_name)); ++allfiles; 

    通过:

     if (dp->d_type != DT_DIR) *allfiles++ = strdup(strcat(strcat(strdup(dir), "/"), dp->d_name)); 

    如果你的平台有它,你考虑过使用glob()吗?

    无法增加allfiles指针,因为你只分配了空间来保存1个指针(到char * )。 另一个问题是,当找到目录时会覆盖所有文件(从而丢失所有以前找到的文件和目录)。

      以上就是c/c++开发分享c:返回目录中的所有文件名相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549813.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐