#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <unistd.h>
int readFileList(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 dir
continue;
else if(ptr->d_type == 8) ///file
(*count_file)++;
else if(ptr->d_type == 10) ///link file
(*count_file)++;
else if(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);
return 1;
}
int main(void)
{
DIR *dir;
char basePath[1000];
///get the current absoulte path
memset(basePath,'\0',sizeof(basePath));
getcwd(basePath, 999);
printf("the current dir is : %s\n",basePath);
///get the file list
memset(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);
return 0;
}
Linux C 读取文件目录下的目录,并统计各目录下的文件数和目录数
最新推荐文章于 2023-07-31 10:11:01 发布