首页 > 代码库 > 编程实现LINUX下目录的层层遍历
编程实现LINUX下目录的层层遍历
/************************************************************************* > File Name: treedir.c > Author: KrisChou > Mail:zhoujx0219@163.com > Created Time: Tue 19 Aug 2014 05:04:50 PM CST ************************************************************************/#include <stdio.h>#include <sys/types.h>#include <dirent.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <sys/stat.h>void print_tree(char* dirname, int spc_cnt);int main(int argc, char* argv[])// ./main dir{ if(argc == 1) { print_tree(".", 0); }else if(argc == 2) { print_tree(argv[1], 0); } return 0 ;}void print_tree(char* dirname, int spc_cnt){ DIR* pdir ; //目录指针 struct dirent* pent ; //可以获取目录下子项d_name的结构体指针 struct stat my_stat ; //根据绝对路径,获取文件信息的结构体 char old_path[128]=""; //保存原来的工作路径 getcwd(old_path, 128); pdir = opendir(dirname); //打开目录 if(pdir == NULL) { perror("opendir"); exit(1); } chdir(dirname); //切换到需要遍历的目录 while((pent = readdir(pdir)) != NULL) { if(strncmp(pent ->d_name, ".", 1) == 0 || strncmp(pent->d_name,"..", 2) == 0) { continue ; } memset(&my_stat, 0 , sizeof(my_stat)); if(stat(pent ->d_name, &my_stat) == -1) { perror("stat"); exit(1); } if(S_ISDIR(my_stat.st_mode)) { printf("%*s%s\n",spc_cnt," ",pent ->d_name); print_tree(pent ->d_name, spc_cnt + 5); }else { printf("%*s%s\n",spc_cnt," ",pent ->d_name); } } closedir(pdir); chdir(old_path); //程序结束切换回原来的目录}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。