c:返回目录中的所有文件名

时间:2011-10-28 10:15:36

标签: c file

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

任何人都可以告诉我我做错了什么或者写这个函数的其他方法吗?

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

3 个答案:

答案 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(从而丢失所有以前找到的文件和目录)。