#include<stdio.h>#include<stdlib.h>#include<string.h>#include<dirent.h>#include<unistd.h>intreadFileList(char*basePath,int*count_dir,int*count_file){
DIR *dir;struct dirent *ptr;char base[1000];if((dir=opendir(basePath))==NULL){perror("Open dir error...");exit(1);}while((ptr=readdir(dir))!=NULL){if(strcmp(ptr->d_name,".")==0||strcmp(ptr->d_name,"..")==0)///current dir OR parrent dircontinue;elseif(ptr->d_type ==8)///file(*count_file)++;elseif(ptr->d_type ==10)///link file(*count_file)++;elseif(ptr->d_type ==4)///dir{memset(base,'\0',sizeof(base));strcpy(base,basePath);strcat(base,"/");strcat(base,ptr->d_name);readFileList(base);(*count_dir)++;}}closedir(dir);return1;}intmain(void){
DIR *dir;char basePath[1000];///get the current absoulte pathmemset(basePath,'\0',sizeof(basePath));getcwd(basePath,999);printf("the current dir is : %s\n",basePath);///get the file listmemset(basePath,'\0',sizeof(basePath));strcpy(basePath,"./XL");//************************
DIR *dir;struct dirent *ptr;char base[1000];if((dir=opendir(basePath))==NULL){perror("Open dir error...");exit(1);}while((ptr=readdir(dir))!=NULL){if(ptr->d_type ==4)///dir{int count_dir=0;int count_file=0;int*p1=&count_dir;int*p2=&count_file;memset(base,'\0',sizeof(base));strcpy(base,basePath);strcat(base,"/");strcat(base,ptr->d_name);printf("the dir name: %s\n",basePath);readFileList(base,p1,p2);printf("the number of dir:%d\n",count_dir);printf("the number of file:%d\n",count_file);}}//************************//readFileList(basePath);//printf("the total is : %d\n",count_dir+count_file);return0;}