c++ - 递归 count_files 函数不返回完整结果

标签 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

最佳答案

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

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,而是增加子目录中找到的文件数量。

关于c++ - 递归 count_files 函数不返回完整结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126668/

相关文章:

function - 将 std::function 添加到向量 c++

c++ - 指向抽象类型的指针数组

css - 在 gtk 刻度上更改 slider 大小

c - 如何使用 printf() 实现 gotoxy()

c - 将指针传递给字符串,不兼容的指针类型

c++ - 将一个输入文件与给定数量的文件匹配的算法

c++ - 在 OpenCV 中更改相机设置

c# - c++ exe如何定位c# dll?

c++ - delete[] 运算符的参数可以指向数组的非第一个元素吗?

C++ 数组下标运算符模板