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;