#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getFileNum(const char* path);
int main(int argc, char* argv[]){
if(argc < 2){
printf("%s path\n", argv[0]);
return -1;
}
int num = getFileNum(argv[1]);
printf("普通文件的个数:%d\n",num);;
return 0;
}
int getFileNum(const char* path){
DIR * dir = opendir(path);
if(dir == NULL){
perror("opendir");
exit(0);
}
struct dirent* ptr ;
int total = 0;
while ((ptr = readdir(dir)) != NULL){
char* dname = ptr->d_name;
if(strcmp(dname,".") == 0 || strcmp(dname,"..") == 0){//第二个strcmp没有和0进行比较,真是眼瞎了,找这么久没看出来问题。
continue;
}
if(ptr->d_type == DT_DIR){
char newPath[1024];
sprintf(newPath, "%s/%s",path,dname);
total += getFileNum(newPath);
}
if(ptr->d_type == DT_REG){
total++;
}
}
closedir(dir);
return total;
}
PS:opendir函数报错,也可能是中间发生了什么终止,导致没有执行到closedir函数而导致的报错。