目录检索
来源:互联网 发布:三菱plc编程步进视频 编辑:程序博客网 时间:2024/06/06 03:07
目录检索 - 遍历目录
功能:遍历目录指定或当前目录下所有文件。
实现:通过文件I/O函数,目录检索相关API组合实现功能
- 根据输入文件名,opendir()获得文件指针;
DIR *dp = opendir(pathname);
- readdir()取得目录项到结构体;
struct dirent *dirp;while((dirp = readdir(dp)) != NULL)
目录项是一个个的读取,它是包含了文件索引号,目录项大小,文件类型,文件名这一类信息的结构体,定义如下:
struct dirent{ ino_t d_ino; off_t d_off; unsigned short d_reclen; unsigned char d_type; char d_name[256];}
- 组合路径与文件名;
if(pathname[strlen(pathname)-1] == '/') sprintf(name, "%s%s", pathname, dirp->d_name);else sprintf(name, "%s/%s", pathname, dirp->d_name);
- stat()取得文件信息,判断是文件就直接输出,是目录继续调用自己,重复以上操作。
struct stat filestat;if(!S_ISDIR(filestat.st_mode)) printf("[%7ld] %s\n", filestat.st_size, pathname);else open_add_path(pathname);
struct stat 文件控制信息结构体如下:
struct stat{ dev_t st_dev; //文件的设备编号 ino_t st_ino; //节点 mode_t st_mode; //文件的类型和存取的权限 nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1 uid_t st_uid; //用户ID gid_t st_gid; //组ID dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号 off_t st_size; //文件字节数(文件大小) unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小) unsigned long st_blocks; //块数 time_t st_atime; //最后一次访问时 time_t st_mtime; //最后一次修改时 time_t st_ctime; //最后一次改变时间(指属性)}
代码贴
#include <stdio.h>#include <dirent.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#define NANE_SIZE 200int open_add_path(char const*pathname){ char name[NANE_SIZE]; struct dirent *dirp; DIR *dp = opendir(pathname); if(dp == NULL) return -1; while((dirp = readdir(dp)) != NULL) { if(!(strcmp(dirp->d_name, ".") && strcmp(dirp->d_name, ".."))) continue; else { memset(name, 0, sizeof(name)); if(pathname[strlen(pathname)-1] == '/') sprintf(name, "%s%s", pathname, dirp->d_name); else sprintf(name, "%s/%s", pathname, dirp->d_name); //printf("%s\n", name); struct stat filestat; if(stat(name, &filestat) < 0) return -1; if(!S_ISDIR(filestat.st_mode)) printf("[%7ld] %s\n", filestat.st_size, name); else { printf("[%7ld] \033[0;33m%s\033[0m\n", filestat.st_size, pathname); open_add_path(name); // 如果是目录继续打开并获取路径 } } } return 0;}int main(int argc, char const *argv[]){ if(argc == 1) open_add_path("."); else open_add_path(argv[1]); return 0;}
阅读全文
0 0
- 目录检索
- 目录快速检索
- Lucene多索引目录检索
- 检索一个目录下所有文件
- Python读取文件目录并检索
- Linux下获取文件大小,检索目录函数
- python小工具:检索目录大小
- Linux下获取文件大小,检索目录函数
- 检索
- 检索
- 检索
- 检索
- 检索
- 循环双链表加目录IO实现简单的文件检索
- 非递归的算法检索目录及子文件
- Android开源项目(类库+控件)检索目录
- java的File机制实现目录下的文件检索
- Android drawable&mipmap 资源检索顺序 最佳资源存放目录
- python编程实现通过多线程的方式来求2000~3000之间的所有的素数
- JS截取与分割字符串常用技巧总结
- MapReduce心得170802
- VS2013快捷键大全
- Eclipse/MyEclipse添加反编译工具
- 目录检索
- ccf认证数字排序
- VirtualAPK 框架简介
- 排序算法——插入排序(直接插入排序、折半插入排序、希尔排序)
- <c++>继承及菱形继承
- 一位资深程序员大牛给予Java初学者的学习路线建议
- 暴力状压 [Usaco2007 Open]Fliptile 翻格子游戏
- 顺序栈 顺序队列编写的小停车场
- STL容器初探