如何编写一个函数来返回包含子目录中文件的目录中的所有文件名。 到目前为止,我有类似的东西,但它没有正常工作,我尝试调用此函数并打印出每个元素,它只打印第一个元素。
任何人都可以告诉我我做错了什么或者写这个函数的其他方法吗?
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;
}
答案 0 :(得分:2)
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));
答案 1 :(得分:0)
如果您的平台拥有它,您是否考虑过使用glob()?
答案 2 :(得分:0)
无法增加allfiles
指针,因为您只分配了空间来容纳1个指针(到char *
)。另一个问题是,当找到目录时会覆盖allfiles
(从而丢失所有以前找到的文件和目录)。