/*
//打开一个目录
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
参数:
-name:需要打开的目录的名称
返回值:
-Dir * 类型,理解为目录流
错误返回NULL
//读取目录中的数据
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
参数:dirp是opendir返回的结果
返回值:
struct dirent:代表读取到的文件的信息
读取到了末尾或者失败了,返回NULL
//关闭目录
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
*/
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int getFileNum(const char * path);
//读取某个目录下所有的普通文件的个数
int main(int argc,char *argv[])//argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数 * argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数。其中argv[0] 指向程序运行的全路径名,argv[1] 指向在DOS命令行中执行程序名后的第一个字符串,argv[2] 指向执行程序名后的第二个字符串,argv[argc]为NULL。
{
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){
continue;
}
//判断是否是普通文件还是目录
if(ptr->d_type==DT_DIR){
//目录,需要继续读取这个目录
char newpath[256];
sprintf(newpath,"%s/%s",path,dname);
total+=getFileNum(newpath);
}
if(ptr->d_type==DT_REG){
//普通文件
total++;
}
}
//关闭目录
closedir(dir);
return total;
}
1.28目录遍历函数
于 2022-04-22 09:45:16 首次发布