9.自己实现linux中的tree
2024-09-05 22:00:08
运行效果:
代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h> void MyTree(char szPath[],int deep)
{
//目录用于遍历
DIR *pDir;
//用于存储文件信息
struct dirent *pDent;
//子目录名字
char szSubPath[PATH_MAX]; //用于判断文件的类型
struct stat stInfo;
//用来遍历层数,格式输出
int i; //打开当前目录,获取目录列表
pDir = opendir(szPath);
//如果打开失败
if(pDir == NULL)
{
perror("Fail to opendir");
return;
} //不断循环
while()
{
//依次读取文件信息
pDent = readdir(pDir);
//如果读取失败,当前递归结束
if(pDent == NULL)
{
break;
} //如果获得了文件信息 //过滤掉当前目录(.)和上一层目录 (..)
if(strcmp(pDent->d_name,".")== || strcmp(pDent->d_name,"..")==)
{
continue;
} //格式输出
for(i=;i!=deep;i++)
{
printf("│ ");
} //如果是目录文件
if(pDent->d_type == DT_DIR)
{
//红色
printf("├── \033[0;31m%s\033[0m\n",pDent->d_name);
sprintf(szSubPath,"%s/%s",szPath,pDent->d_name);
MyTree(szSubPath,deep+);
}
else
{
stat(pDent->d_name,&stInfo);
//判断是否是普通文件
if(S_ISREG(stInfo.st_mode))
{
//判断是否有执行权限
if(stInfo.st_mode & )
{
//青色
printf("├── \033[1;32m%s\033[0m\n",pDent->d_name);
}
//不能执行的文件
else
{
printf("├── %s\n",pDent->d_name);
}
}
//是否是一个块文件
else if(S_ISFIFO(stInfo.st_mode))
{
printf("├── \033[1;42m%s\033[0m\n",pDent->d_name);
}
//其他文件
else
{
printf("├── %s\n",pDent->d_name);
} }
}
closedir(pDir);
} int main(int argc,char **argv)
{
//char szPath[PATH_MAX]; if(argc == )
{
chdir(argv[]);
} //getcwd(szPath,PATH_MAX);
//MyTree(szPath,0);
MyTree(argv[],); return ;
}
最新文章
- Atitit 边缘检测原理attilax总结
- 【代码笔记】iOS-3DES+Base64加密解密
- [MSSQL] Useful SQL Scripts - CalendarBase
- Hibernate学习---第五节:普通组件和动态组件
- jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习
- python打印详细的异常信息
- Speech Patterns (string)
- asp.net_MVC_jq三级联动
- Sql Server 面试题
- Oracle 12C 新特性 - “可插拔数据库”功能
- 一次ARP病毒排查
- JDBC(7)—DAO
- appJar 界面效果
- httpService 和 WebService接口协议
- [SoapUI] Datasink怎么显示每次循环的结果
- VFL使用
- 菜鸟vimer成长记——第2.2章、visual模式
- R语言实战(七)图形进阶
- CUDA Samples: matrix multiplication(C = A * B)
- poj 2337(单向欧拉路的判断以及输出)
热门文章
- jquery自动完成插件的使用
- Linux下实现视频读取
- hdu 2485 Destroying the bus stations 最小费用最大流
- hdu3572Task Schedule 最大流,判断满流 优化的SAP算法
- 【airtest】iOS,Android 依托 jenkins 并行跑
- 10分钟 PySimpleGUI 图形界面入门
- 安装Mysql的一些问题,比如Net Connect 卸载不掉,注册表相关操作
- CSS - display:inline-block 相邻元素间有4px的空白间距
- webstorm + babel
- JavaScript 原型 原型链