如何编写一个函数来返回包含子目录中文件的目录中的所有文件名。 到目前为止,我有类似的东西,但它不能正常工作,我尝试调用此函数并打印出每个元素,它只打印第一个元素。
谁能告诉我我做错了什么或者写这个函数的其他方法?
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