我正在执行一项功能,该功能计算目录中文件的数量(包括子目录和该子目录中的文件)。例如:
Base / Dir 1 / Dir 1.1
目录1具有:hi.txt,hi2.txt
Dir 1.1具有:hi3.txt,hi4.txt,hi5.txt
因此,Base中文件数量的输出应为7(忽略。和..)
目录1中的文件数输出应为6
目录2中的文件数输出应为3
这是我试图做的。
void recorrido(const char *actual, int indent, int op, char * output,int numF)
{
DIR *dir;
struct dirent *entrada;
char path[PATH_MAX+1];
char path2[PATH_MAX+1];
if (!(dir = opendir(actual))){
return;
}
while ((entrada = readdir(dir)) != NULL)
{
if (entrada->d_type == DT_DIR) //Directory
{
if ((strcmp(entrada->d_name, ".") != 0) && (strcmp(entrada->d_name, "..") != 0)) //Ignore . and ..
{
strcpy(path, actual);
strcat(path, "/");
strcat(path, entrada->d_name);
recorrido(path, indent + 2,op,output,numF++);
printf("Number of files for %s is %d", path, numF);
}
}
}
else if (entrada->d_type != DT_DIR){ //just file
if (strcmp(actual, "") == 0){
strcpy(path2, "./");
strcat(path2, entrada->d_name);
strcpy(actual, path2);
}
else
{
strcpy(path2, actual);
strcat(path2, "/");
strcat(path2, entrada->d_name);
//printf("File path is %s\n",path2);
numF++;
}
}
closedir(dir);
}
我在为每个目录打印适当数量的文件时遇到问题,如果我在基本目录(测试1和测试2)中有2个文件夹,它将考虑这些文件夹,但是如果我在测试1中具有某些内容,它将忽略它
答案 0 :(得分:1)
如评论中所述,您需要返回增加的值。
更改功能签名:
int recorrido(const char *actual, int indent, int op, char *output, int numF)
更改函数调用自身的方式:
numF = recorrido(path, indent + 2, op, output, numF + 1);
返回修改后的值:
…
if (! (dir = opendir(actual))) {
return numF;
}
…
…
closedir(dir);
return numF;
}
…并更改函数的调用方式。
我也强烈建议您不要混用语言(请坚持使用英语来编写代码和注释!),而要花时间整齐而一致地格式化代码(尤其是缩进和空格)。您代码的读者(包括您自己!)将感谢您-实际上,格式清晰的代码不是可选的,几乎在所有地方都强制执行了 。