经典错误,请高人帮忙分析-linux下统计当前目录下的子目录数(当前目录)与其各子目录下的文件数?

发布网友 发布时间:2022-04-24 15:49

我来回答

2个回答

热心网友 时间:2023-10-20 13:11

错误在于p_Dir是个全局变量。
下为修改后代码,测试正确。

#include <iostream>
using namespace std;
#include <sys/types.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <string.h>

int Fn=0;
int Dn=0;

int count(char *);

int main(int argc,char* argv[])
{
DIR* p_Dir = NULL;

if(argc!=2){
cout <<"Usage:<filename> DirName"<<endl;
return -1;
}

p_Dir = opendir(argv[1]);

if(NULL==p_Dir){
cout <<"Can't find the Dir:"<<argv[1]<<endl;
return -2;
}
else{
closedir(p_Dir);
}
p_Dir=NULL;

count(argv[1]);//函授调用

cout <<"The director include: "<<Fn<<" files and "<<Dn<<" directors."<<endl;
}

//函数定义
int count(char* s_dir)
{
DIR* p_Dir = NULL;
struct stat buf;
struct dirent* p_Dirent = NULL;
if(stat(s_dir,&buf)<0){
cout << "stat error\n";
return -2;
}
if(S_ISDIR(buf.st_mode)){
if(NULL==(p_Dir = opendir(s_dir))){
cout << "Open "<<s_dir<<" director failure."<<endl;
return -1;
}
while(p_Dirent = readdir(p_Dir)){
if('.'==(p_Dirent->d_name[0])) continue;
char str[256];
memset(str,0,256);
strcpy(str,s_dir);
strcat(str,"/");
strcat(str,p_Dirent->d_name);
cout <<"found dir: " <<str<<endl;
count(str); //嵌套调用
}
Dn++;
return 0;
}
else{
Fn++;
return 0;
}
}

热心网友 时间:2023-10-20 13:11

显然,你的程序在递归中未能如愿的返回,只能统计深度最深的一个目录,检查并修改之。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com