运行效果:

代码:

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <dirent.h>
  5. #include <sys/stat.h>
  6. void MyTree(char szPath[],int deep)
  7. {
  8. //目录用于遍历
  9. DIR *pDir;
  10. //用于存储文件信息
  11. struct dirent *pDent;
  12. //子目录名字
  13. char szSubPath[PATH_MAX];
  14. //用于判断文件的类型
  15. struct stat stInfo;
  16. //用来遍历层数,格式输出
  17. int i;
  18. //打开当前目录,获取目录列表
  19. pDir = opendir(szPath);
  20. //如果打开失败
  21. if(pDir == NULL)
  22. {
  23. perror("Fail to opendir");
  24. return;
  25. }
  26. //不断循环
  27. while()
  28. {
  29. //依次读取文件信息
  30. pDent = readdir(pDir);
  31. //如果读取失败,当前递归结束
  32. if(pDent == NULL)
  33. {
  34. break;
  35. }
  36. //如果获得了文件信息
  37. //过滤掉当前目录(.)和上一层目录 (..)
  38. if(strcmp(pDent->d_name,".")== || strcmp(pDent->d_name,"..")==)
  39. {
  40. continue;
  41. }
  42. //格式输出
  43. for(i=;i!=deep;i++)
  44. {
  45. printf("│ ");
  46. }
  47. //如果是目录文件
  48. if(pDent->d_type == DT_DIR)
  49. {
  50. //红色
  51. printf("├── \033[0;31m%s\033[0m\n",pDent->d_name);
  52. sprintf(szSubPath,"%s/%s",szPath,pDent->d_name);
  53. MyTree(szSubPath,deep+);
  54. }
  55. else
  56. {
  57. stat(pDent->d_name,&stInfo);
  58. //判断是否是普通文件
  59. if(S_ISREG(stInfo.st_mode))
  60. {
  61. //判断是否有执行权限
  62. if(stInfo.st_mode & )
  63. {
  64. //青色
  65. printf("├── \033[1;32m%s\033[0m\n",pDent->d_name);
  66. }
  67. //不能执行的文件
  68. else
  69. {
  70. printf("├── %s\n",pDent->d_name);
  71. }
  72. }
  73. //是否是一个块文件
  74. else if(S_ISFIFO(stInfo.st_mode))
  75. {
  76. printf("├── \033[1;42m%s\033[0m\n",pDent->d_name);
  77. }
  78. //其他文件
  79. else
  80. {
  81. printf("├── %s\n",pDent->d_name);
  82. }
  83. }
  84. }
  85. closedir(pDir);
  86. }
  87. int main(int argc,char **argv)
  88. {
  89. //char szPath[PATH_MAX];
  90. if(argc == )
  91. {
  92. chdir(argv[]);
  93. }
  94. //getcwd(szPath,PATH_MAX);
  95. //MyTree(szPath,0);
  96. MyTree(argv[],);
  97. return ;
  98. }

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. Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build*解决办法

    easy_install -U setuptools or pip install ipython 亲测有效

  2. SqlServer与MySql 系统表查询自建表数据

    SqlServer: SELECT * FROM sys.sysobjects WHERE type='U' ORDER BY name SELECT * FROM sys.syscolumns WH ...

  3. apache出现You don't have permission to access / on this server提示的解决方法

    在apache的配置文件httpd.conf里定义了对网站根默认的访问权限 #<Directory />    Options FollowSymLinks    AllowOverrid ...

  4. 从操作系统内核看设计模式--linux内核的facade模式

    linux的内核当中处处充满了设计模式,本文先讨论一下外观模式.外观模式就是将客户和子系统解耦,为客户将复杂的子系统进行封装,从而使得客户可以使用简单易用的接口.  众所周知,linux和unix是十 ...

  5. 详解优动漫PAINT中的图层模式

    使用优动漫PAINT绘制漫画或者插画的时候,在其新建画布区域有一个基本颜色模式的选项,分别包括彩色模式.灰度模式和黑白位图模式,那么这三个模式有什么区别呢,我们在绘图的时候应该如何选择呢? 彩色模式: ...

  6. 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)

    原文地址:http://www.cnblogs.com/baiboy/p/orc4.html   阅读目录 目录 Cache Fusion 原理 什么是 Cache Fusion? 什么是高可用 FA ...

  7. jQuery中Ajax的几种写法

    1.   $.post(url,params,callback); 采用post方式提交,中文参数无需转码,在callback中如果要获取json字符串,还需转换一下. 2.  $.getJSON(u ...

  8. 【数据分析学习】Pandas学习记录

    import pandas as pd path = r'F:\数据分析专用\数据分析与机器学习\food_info.csv' with open(path, 'r') as f: data = pd ...

  9. Java JDK 1.7 和 JDK 1.8 新特性

    0 引言 本文主要介绍 Java JDK 中 1.7 和 1.8 的新特性. 1 JDK 1.7 新特性 1. switch可以接受String类型: public class Switch { pu ...

  10. Linux分布式测试

    在使用Jmeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能. 执行机和调度机做好 ...