我在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
答案 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。