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

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;

posted @ 2018-10-20 20:11  ~雨落忧伤~  阅读(402)  评论(0编辑  收藏  举报