递归count_files函数不返回完整的结果

时间:2016-05-09 22:51:01

标签: c++ c function recursion

我在C / C ++中编写一个递归函数,用于计算给定文件路径及其子目录中的所有文件和目录。该函数有两个参数 - 搜索目录和file_count int,默认设置为值0.

int count_files(char * directory, int file_count = 0) {
    DIR * dirp;
    struct dirent * entry;
    dirp = opendir(directory);
    while ((entry = readdir(dirp)) != NULL) {
        if (entry->d_type == DT_REG) { 
            file_count++;
        } else if(entry->d_type == DT_DIR) {
            if(strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
            } else {
                file_count++;
                char rcsvdir[256];
                sprintf(rcsvdir, "%s%s/", directory, entry->d_name);
                count_files(rcsvdir, file_count);
            }
        }
    }
    closedir(dirp);
    return file_count;
}

我遇到的麻烦是它不计算子目录中的所有文件。想象一个包含子目录的目录:

-root
    file1
    file2
    file3
    -sub1
        file1
        file2
    -sub2
        file1
        file2

预期的回报整数将是 9 (2个目录,7个文件),但它返回 5 。据我所知,计算根目录中的所有文件,但只计算子目录中的第一个文件。任何关于为什么会发生这种情况的帮助将不胜感激。

更新

通过替换此行解决了该问题:

count_files(rcsvdir, file_count);

以下内容:

file_count = count_files(rcsvdir, file_count);

感谢@IInspectable

1 个答案:

答案 0 :(得分:0)

您忽略了递归函数的返回值,您可能需要:

char rcsvdir[256];
sprintf(rcsvdir, "%s%s/", directory, entry->d_name);
file_count += count_files(rcsvdir, file_count);

而不是:

file_count++;
....    
count_files(rcsvdir, file_count);

这样,您可以增加在子目录中找到的文件数,而不是忘记函数返回的文件数量而只增加1。