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 * )。 另一个问题是,当找到目录时会覆盖所有文件(从而丢失所有以前找到的文件和目录)。