Linux 获取制定目录的文件数(递归)

时间:2022-10-31 14:45:56
#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;

}