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

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

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

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

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

 1         private void Form1_Load(object sender, EventArgs e)
 2         {
 3             //文件夹路径
 4             string path = "D:\\Notepad++";
 5
 6             //TreeView根节点
 7             TreeNode node = treeView1.Nodes.Add(path);
 8
 9             //调用递归
10             DirectoryToTree(path, node.Nodes);
11
12         }
13
14         //递归加载文件夹目录及目录下文件
15         private void DirectoryToTree(string path, TreeNodeCollection nodes)
16         {
17             foreach (string item in Directory.GetDirectories(path))
18             {
19                 TreeNode node = nodes.Add(Path.GetFileName(item));
20                 DirectoryToTree(item, node.Nodes);
21             }
22             string[] strFiles = Directory.GetFiles(path);
23             foreach (string str in strFiles)
24             {
25                 nodes.Add(Path.GetFileName(str));
26             }
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,如果不用这个神技,处理起来比较麻烦,下面是一种写法

               if( A() )
                {
                    if( B() )
                    {
                        C();
                    }
                }

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

           do
            {
                if( !A() )
                {
                    break;
                }

                if( !B() )
                {
                    break;
                }
                C();
            } while( false );

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

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

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

do
{
    if( !A() )
    {
        break;
    }

    if( !B() )
    {
        break;
    }
    C();
} while( false );
D();

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

try
{
    if( !A() )
    {
        throw new Exception();
    }

    if( !B() )
    {
        throw new Exception();
    }
    C();
}
catch( Exception e)
{

}
finally
{
    D();
}

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

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

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

最新文章

  1. C#大数据文本高效去重
  2. 遇到 HTTP 错误 403.14 - Forbidden?
  3. APP性能测试
  4. OC 多态
  5. 【Android】首次进入应用时加载引导界面
  6. spring4 定时任务
  7. 【HDU 3038】 How Many Answers Are Wrong (带权并查集)
  8. CSS3属性值之box-shadow
  9. 浅谈MySQL分表
  10. Visual Studio命令行创建库文件lib
  11. Keepalived高可用集群实践
  12. deeplearning.ai 人工智能行业大师访谈 Pieter Abbeel 听课笔记
  13. Invalid bound statement (not found)解决方法
  14. 蓝桥杯java 关于大范围时间的
  15. cafee编译错误几个总结
  16. Pyhon入门基础(1)---Pycharm安装及破解
  17. vue-area-linkage Vue省市区三级列表联动插件使用
  18. SpringBoot系列: Spring MVC视图方法的补充
  19. 博客主Judge已跳槽搬家emmm
  20. 【Codeforces 111C】Petya and Spiders

热门文章

  1. 【矩阵乘法】CDOJ1610 黑红梅方
  2. 【动态规划】mr368-教主种树
  3. 搭建maven支持的web工程的步骤
  4. C# mvc Request 请求过长报404错误的解决思路分析
  5. Oracle 11gR2 RAC连接时ORA-12545错误
  6. 如何获取gcr等镜像
  7. iOS:导航条滚动透明度随着tableView的滚动而变化
  8. 30分钟LINQ教程【转】
  9. jquery中获取相邻元素相关的命令:next()、prev()和siblings()
  10. 解决SSH窗口关闭,linux上的应用也关闭