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;

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. 【动态规划/递推】BZOJ1806[IOI2007]- Miners

    IOI历史上的著名水题,我这种蒟蒻都能写的东西. [思路] 用1.2.3分别代替三种食物,0表示当前矿井没有食物.f[i][a][b][c][d]当前第i个食物,矿1的食物顺序由上至下为a,b:矿2的 ...

  2. Erlang学习记录(一)——Windows下的环境搭建

    一.安装编译器 在http://www.erlang.org/download.html下载R16B01 Windows Binary File并安装. 二.运行编译器 安装完编译器后,打开安装目录下 ...

  3. redis源码解析之内存管理

    zmalloc.h的内容如下: void *zmalloc(size_t size); void *zcalloc(size_t size); void *zrealloc(void *ptr, si ...

  4. 原生js实现图片轮播思路分析

    一.复习原生js实现图片轮播 1.要点 自动轮播 点击小圆圈按钮,显示相应图片 点击左右箭头,实现向前向后轮播图片 2.实现思路 <div id="container"> ...

  5. UNIX域套接字连接mysql

    用户可以在配置文件中指定套接字文件的路径,如--socket=/data/mysql/mysql.sock [root@localhost ~]# mysql -uroot -p123456 -S / ...

  6. PHP手册笔记

    <?php getenv — 获取一个环境变量的值 $ip = getenv ( 'REMOTE_ADDR' ); // 或简单仅使用全局变量($_SERVER 或 $_ENV) $ip = $ ...

  7. mysql memory存储引擎简单测试

    Auth: jin Date: 20140423 mysql> CREATE TABLE `t4` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` ...

  8. 诡异的 "密码取回" 邮件问题

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. redigo简单理解

    package main import ( "fmt" "github.com/gomodule/redigo/redis") func main() { // ...

  10. 关于TagHelper的那些事情——如何自定义TagHelper(TagHelper基类)

    写在开头 前面介绍了TagHelper的基本概念和内嵌的TagHelpers,想必大家对TagHelper都有一定的了解.TagHelper看上去有点像WebControl,但它不同于WebContr ...