递归遍历Linux下的目录文件源码实现
来源:互联网 发布:淘宝买机票便宜吗 编辑:程序博客网 时间:2024/06/06 14:23
网上搜到的结果大都不令人满意,这里综合了网上的结构,做了小许改动.希望对大家有帮助.
在Linux下的目录结构操作基本上使用opendir,readdir,closedir就够了.
#include <stdio.h>#include <string.h>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>int trave_dir(char* path){ DIR *d;//声明一个句柄 struct dirent *ent;//readdir函数的返回值就存放在这个结构体中 struct stat sb; char childpath[512] = {'\0'};//拼凑下一级目录的全路径 if(!(d = opendir(path))) { printf("error opendir %s!!!\n",path); return -1; } while((ent = readdir(d)) != NULL) { //把当前目录.,上一级目录..及隐藏文件都去掉,避免死循环遍历目录 if(strncmp(ent->d_name, ".", 1) == 0) continue; //判断该文件是否是目录 if(ent->d_type & DT_DIR){ memset(childpath, '\0', sizeof(childpath)); char* format = path[strlen(path)-1]=='/'?"%s%s":"%s/%s"; snprintf(childpath, 512, format, path, ent->d_name); printf("[dir]%s\n", childpath); trave_dir(childpath); }else{ printf("\t%s\n", ent->d_name); } } closedir(d); return 0;}int main(int argc, char* argv[]){ if(argc != 2){ printf("Usage: %s <path>\n", argv[0]); return 0; } trave_dir(argv[1]); return 0;}
主要特点:
(1)只需要一个入参,即指定要遍历目录树的顶层目录,并会自动判断末尾是否含有"/"
(2)目录树的打印只在函数内部实现,不会用到相关动态内存分配
(3)从readdir中返回的Dir结构就可以判断这层目录是目录还是真正的文件,不需要使用stat等函数来额外判断
使用方法:
gcc -g readdir_demo.c -o readdir_demo
./readdir_demo "/home/taoyx"或是
./readdir_demo "/home/taoyx/"
代码运行截图
0 0
- 递归遍历Linux下的目录文件源码实现
- Linux下递归遍历指定目录下的文件内容并删除的函数实现
- 递归遍历目录下的文件
- php递归遍历目录下的文件
- php递归遍历目录下的文件
- C++实现Linux下遍历指定目录下的文件
- linux下遍历某个目录的文件,或者文件夹。遍历、递归
- php递归函数实现遍历指定文件下的目录与文件数量
- python实现递归遍历目录(linux下测试通过)
- 递归遍历一个文件目录下的所有文件
- linux遍历目录下的文件
- LINUX下目录文件的遍历---编程
- linux 遍历目录下的文件
- Linux目录遍历实现 -- 列出当前目录下所有文件
- C 语言递归遍历目录下的所有文件
- 递归遍历某个目录下的所有java文件
- c语言递归遍历某个目录下的txt文件
- perl 递归地遍历目录下的文件
- 基于模糊控制的便携式心电监护仪的设计
- Android设置透明、半透明等效果
- nova boot block-device-mapping
- Linux 更改MySQL目录
- 错误:Unsupported major.minor version 51.0(jdk版本错误)
- 递归遍历Linux下的目录文件源码实现
- c#读取Oracle的Blob字段
- 不需要理由
- 外观模式
- 【智力题】汽车加油问题
- Java基础语法(下篇)
- Unity3d中的属性(Attributes)整理
- 系统中基于MAX6636的多点温度监测
- 基于消息系统架构设计