#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
/*
获取指定文件数目(absolute path)
*/
int getFileNum(char* root)
{
DIR *dir = NULL;
//打开目录
dir = opendir(root);
if(dir == NULL)
{
perror("opendir");
exit(1);
}
//读取目录
struct dirent* ptr = NULL;
char path[1024] = {0};
int total = 0;
while ((ptr = readdir(dir))!=NULL) {
if(strcmp(ptr->d_name,".") == 0||strcmp(ptr->d_name,"..")==0){
continue;
}
//递归
if(ptr->d_type == DT_DIR){
sprintf(path,"%s/%s",root,ptr->d_name);
total += getFileNum(path);
}
if(ptr->d_type == DT_REG){
total++;
}
}
closedir(dir);
return total;
}
int main(int argc,char* argv[])
{
if(argc<2){
printf("./fileNum path");
exit(1);
}
int num = 0;
num = getFileNum(argv[1]);
printf("%s has %d file\n",argv[1],num);
return 0;
}