运行效果:

代码:

 #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 ;
}

9.自己实现linux中的tree的更多相关文章

  1. linux中没有tree命令,command not found,解决办法

    在有网络的情况下: 1.包管理器安装 centos 中用  yum -y install tree ubuntu 中用  apt-get install tree 当然如果需要权限不要忘了在前面加上 ...

  2. 用python写一个类似于linux中的tree

    import os filePath = 'g:/File' j = 0 # 查找的深度计数 def tree(filePath,j): dir_now = os.listdir(filePath) ...

  3. 在 Linux 中安装 Oracle JDK 8 以及 JVM 的类加载机制

    参考资料 该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference .Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以直接找 ...

  4. 【转载】Linux中常用操作命令

    说明:开始学习linux系统,为了方便查看,特转载一篇Linux中常用操作命令,转载地址:http://www.cnblogs.com/laov/p/3541414.html 正文: Linux简介及 ...

  5. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  6. linux中的优先搜索树的实现--prio_tree【转】

    转自:http://blog.csdn.net/bailyzheng/article/details/8041943 linux中的优先搜索树的实现--prio_tree prio_tree在linu ...

  7. Linux中的磁盘

    Linux的磁盘管理 (很重要请注意高能预警) 硬盘:几个盘片,双面,磁性颗粒, 处理速率不同步:借助于一个中间层 文件系统(FileSystem)     可以实现对磁盘行的文件进行读写     文 ...

  8. Linux内核Radix Tree(二)

    1.   并发技术 由于需要页高速缓存是全局的,各进程不停的访问,必须要考虑其并发性能,单纯的对一棵树使用锁导致的大量争用是不能满足速度需要的,Linux中是在遍历树的时候采用一种RCU技术,来实现同 ...

  9. linux中的权限

    第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_U ...

随机推荐

  1. Boost1.67编译+CMake Generate时遇到的一个错误

    下载的一个库编译时依赖boost,记录一下boost的编译: 下载源码 vs命令行里cd到根目录,运行bootstrap.bat,发现多了几个文件{b2.exe.bjam.exe.project-co ...

  2. 工厂模式-CaffeNet训练

    参考链接:http://blog.csdn.net/lingerlanlan/article/details/32329761 RNN神经网络:http://nbviewer.ipython.org/ ...

  3. mach-o格式分析

    0x00 摘要 人生无根蒂,飘如陌上尘. 分散逐风转,此已非常身. — 陶渊明 <杂诗> mach-o格式是OS X系统上的可执行文件格式,类似于windows的PE与linux的ELF, ...

  4. 基于 vue2 导航栏透明渐变

    在移动或者app 中经常会用,顶部导航栏固定,但是随着页面向上滚动,导航栏的透明度发生变化. 做法为: 1.首先给要滚动变化的导航添加 :style="style" <mt- ...

  5. java操作Excel的poi基础语法

    创建一个简单的实列 package com.java.poi; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache ...

  6. POI操作Excel的三种Workbook的发展和区别

    POI的一些使用方法: 创建流程:(上级为下级的载体) 1.创建Workbook(工作薄): 2.创建Sheet(表单,可以创建多个): 3.创建Row(行): 4.创建Cell(单元格) 接下来分别 ...

  7. input type=”file“ change事件只执行一次的问题

    js解决办法 HTML:<input id="file",type="file" onchange="upload()" /> ...

  8. Windows自调试Redis

    一.安装Redis 1. Redis官网下载地址:http://redis.io/download,下载相应版本的Redis,在运行中输入cmd,然后把目录指向解压的Redis目录. 2.启动服务命令 ...

  9. 网络教程(13) 深入TCP协议

    应用层向TCP层发送用于网间传输的.用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制).之后TCP把结果包传给IP层 ...

  10. python之组合与继承的使用场景

    1.什么时候使用类的组合?当类之间有显著的不同,并且较小的类是组成较大类所需要的组件,此时用类的组合较合理:场景:医院是由多个科室组成的,此时我们可以定义不同科室的类,这样医院的类我们可以直接使用各个 ...