我正在用 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/