opendir,打开一个目录。
函数原型:DIR *opendir(const char *name)
DIR *fopendir(int fd)
DIR是一个结构指针,是一个内部结构,保存所打开的目录信息。函数出错返回NULL
readdir,读目录 ,<dirent.h>
函数原型:struct dirent *readdir(DIR *dirp); //返回一条记录项(文件或目录)
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
struct dirent { ino_t d_ino; //此目录进入点的inode ff_t d_off; //目录文件开头至此目录进入点的位移 signed short int d_reclen; //d_name 的长度,不包含NULL unsigned char d_type; //d_name 所指的文件类型 har d_name[256]; //文件名 }
递归获取文件个数
#include <dirent.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> int getFileNum(char *root) { //open dir DIR* dir = NULL; dir = opendir(root); if(dir == NULL) { perror("opendir"); exir(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("./a.out dir\n"); exit(1); } int total = getFileNum(argv[1]); printf("%s has file numbers %d\n", argv[1], total); return 0; }
今天的文章opendir、readdir以及使用分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/56237.html