C# -- 使用递归列出文件夹目录及目录下的文件

使用递归列出文件夹目录及目录的下文件

1.使用递归列出文件夹目录及目录下文件,并将文件目录结构在TreeView控件中显示出来。

新建一个WinForm应用程序,放置一个TreeView控件:

代码实现:在Form_load的时候,调用递归方法加载文件目录结构在TreeView控件中

  1. 1 private void Form1_Load(object sender, EventArgs e)
  2. 2 {
  3. 3 //文件夹路径
  4. 4 string path = "D:\\Notepad++";
  5. 5
  6. 6 //TreeView根节点
  7. 7 TreeNode node = treeView1.Nodes.Add(path);
  8. 8
  9. 9 //调用递归
  10. 10 DirectoryToTree(path, node.Nodes);
  11. 11
  12. 12 }
  13. 13
  14. 14 //递归加载文件夹目录及目录下文件
  15. 15 private void DirectoryToTree(string path, TreeNodeCollection nodes)
  16. 16 {
  17. 17 foreach (string item in Directory.GetDirectories(path))
  18. 18 {
  19. 19 TreeNode node = nodes.Add(Path.GetFileName(item));
  20. 20 DirectoryToTree(item, node.Nodes);
  21. 21 }
  22. 22 string[] strFiles = Directory.GetFiles(path);
  23. 23 foreach (string str in strFiles)
  24. 24 {
  25. 25 nodes.Add(Path.GetFileName(str));
  26. 26 }
  27. 27 }

2.运行结果:

神技do{}while(false)

2018-10-19 00:10 by twtyypmb, 202 阅读, 2 评论, 收藏编辑

  • 神技do{}while(false)

do{}while(false)或者说do{}while(0),本人在linux源码中学得,起初看起来比较奇怪,但在处理连续流程中特别有用,例如ABC三个流程,A执行后判断条件如果为true再执行B,如果未false直接结束流程,B执行完后同样判断条件如果为true再执行C,如果未false直接结束流程,最后执行C,如果不用这个神技,处理起来比较麻烦,下面是一种写法

  1. if( A() )
  2. {
  3. if( B() )
  4. {
  5. C();
  6. }
  7. }

可以看出多层嵌套if,如果流程够多if嵌套继续增加,下面是神技写法

  1. do
  2. {
  3. if( !A() )
  4. {
  5. break;
  6. }
  7.  
  8. if( !B() )
  9. {
  10. break;
  11. }
  12. C();
  13. } while( false );

可以看到解决了if嵌套,而且从代码上符合人的逻辑思维

  • try{}catch、升级版do{}while(false)

现在有一个新需求,那就是流程ABC执行后,无论前面的结果都要执行流程D,用do{}while(false)的写法如下

  1. do
  2. {
  3. if( !A() )
  4. {
  5. break;
  6. }
  7.  
  8. if( !B() )
  9. {
  10. break;
  11. }
  12. C();
  13. } while( false );
  14. D();

其实高级语言的try-catch功能同样可以达到do{}while(false)的效果,用法如下

  1. try
  2. {
  3. if( !A() )
  4. {
  5. throw new Exception();
  6. }
  7.  
  8. if( !B() )
  9. {
  10. throw new Exception();
  11. }
  12. C();
  13. }
  14. catch( Exception e)
  15. {
  16.  
  17. }
  18. finally
  19. {
  20. D();
  21. }

是不是看着跟do{}while(false)结构一致

用以上的方法可以很方便的处理流程,希望对大家有所帮助

还有种方法,在方法体内判断return
还有种方法:bool test = A() ? (B() ? C() : false) : false;

C# -- 使用递归列出文件夹目录及目录下的文件 神技do{}while(false)的更多相关文章

  1. python递归列出目录及其子目录下所有文件

    python递归列出目录及其子目录下所有文件 一.前言 函数的递归,简单来说,就是函数内部调用自己 先举个小例子,求阶乘 def factorial(n): if n == 0: return 1 e ...

  2. Linux fing cd 查找文件/文件夹并进入目录命令

    查找文件|文件夹并进入目录命令:cd $() [root@localhost /]# cd $(dirname "`find / -name 'ifcfg-ens33'`") // ...

  3. 递归法绑定文件夹到导航树&在指定文件夹下新建文件夹

    protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString[&q ...

  4. java 弹出选择目录框(选择文件夹),获取选择的文件夹路径

    java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...

  5. Linux常用命令,查看树形结构、删除目录(文件夹)、创建文件、删除文件或目录、复制文件或目录(文件夹)、移动、查看文件内容、权限操作

    5.查看树结构(tree) 通常情况下系统未安装该命令,需要yum install -y tree安装 直接使⽤tree显示深度太多,⼀般会使⽤ -L选项⼿⼯设定⽬录深度 格式:tree -L n [ ...

  6. 【转帖】Linux文件夹对比并提取的差分文件技巧-rsync的妙用

    Linux文件夹对比并提取的差分文件技巧-rsync的妙用 [日期:2016-02-13] 来源:oschina.net  作者:mengshuai [字体:大 中 小] https://www.li ...

  7. node静态资源服务器的搭建----访问本地文件夹(搭建可访问静态文件的服务器)

    我们的目标是实现一个可访问静态文件的服务器,即可以在浏览器访问文件夹和文件,通过点击来查看文件. 1.先创建一个文件夹anydoor,然后在该文件夹里npm init一个package.json文件, ...

  8. 请问用Inno_Setup打包文件夹时怎么排除其中一个文件?

    请问用Inno_Setup打包文件夹时怎么排除其中一个文件? 该文件夹下有几十个文件,多个文件夹,我要一个个加进去该累死,也容易出问题.不知道能不能实现我要的目的. http://www.jrsoft ...

  9. 手动删除文件夹exe病毒并恢复原来文件夹

    转自手动删除文件夹exe病毒并恢复原来文件夹 经常使用U盘.MP3.MP4等移动硬盘的大家,有时是不是会发现,移动硬盘里有现了exe文件,原来本来有一个文件夹的名字是 音乐 ,但后来发现 音乐 这个文 ...

随机推荐

  1. 【LIS】【递推】Gym - 101246H - ``North-East''

    x坐标排序,y坐标当权值,同一个x坐标的,y从大到小排. 求f(i)表示以i结尾的LIS以后,从后向前枚举,不断更新一个max数组,max(i)代表最长上升子序列为i时,当前的 结尾的最大值是多少. ...

  2. python基础之单例模式

    单例模式: 什么是单例模式? 基于某种方法实例化多次得到实例是同一个 实现方法: ip = '1.1.1.1' port = 3306 # 假装来自配置文件 #方法一:定义类方法进行判断 class ...

  3. 创建Django与项目介绍

    主流web框架总结 a socket b 路由关系 c 模板字符串替换(模板语言) 主流web框架 djange a用别人的 b自己写 c自己写 flask a用别人的 b自己写 c用别人的(jinj ...

  4. [Luogu1843]奶牛晒衣服

    题目大意: 你要晒n件衣服,第i件衣服有w[i]滴水, 每件衣服每秒钟会自然风干a滴水,将这件衣服放入烘干机中每秒钟会烘干a+b滴水. 一秒钟不可以拆开,问晒干所有的衣服至少要多少时间? 思路: 二分 ...

  5. [转]java框架spring中的opensessioninview有什么作用

    在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常. 比较典型的是在MV ...

  6. Codeforces Round #345 (Div. 1) E. Clockwork Bomb 并查集

    E. Clockwork Bomb 题目连接: http://www.codeforces.com/contest/650/problem/E Description My name is James ...

  7. APK Develop——SMS Timer

    SMS Timer APK 描述: 在设定时间后向设定手机号码发送设定的内容的短信. 权限获取: <manifest xmlns:android="http://schemas.and ...

  8. python实现多播数据的发送和接收

    在项目中,YS私有协议用到多播技术,在验证其安全特性时用到python去发送多播包,在此做个记录. 多播服务器用于向多播组发送多播数据包,其实现代码如下: #coding:utf-, import s ...

  9. 【docker】解决docker pull镜像 拉取镜像龟速的问题,docker拉取镜像使用阿里云docker镜像加速器

    在docker拉取mysql镜像过程中,出现龟速的问题,解决这个问题的方法: 这个页面 停留了好久好久,依旧没有下载完成. 碰上这种情况 1.先退出Ctrl+C 2.在浏览器上进入阿里云docker库 ...

  10. iOS:使用block进行类与类,控制器与控制器之间的传值

    介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况 ...