C#TreeView控件遍历文件夹下所有子文件夹以及文件

  一直对递归的理解不深刻,有时候觉得很简单,可是用起来总会出错。这里需要在TreeView控件里显示一个文件夹下的所有目录以及文件,毫无意外的需要用到递归。

  一开始,想到用递归写一个生成每一个节点(TreeNode)的方法,最后将根结点添加到TreeView中即可。

  

 1   private static TreeNode getRootNode(string dirname)//根据传入的文件夹地址,遍历所有的子目录和文件并生成节点
 2         {
 3             TreeNode node = new TreeNode(dirname);
 4             string[] dirs = Directory.GetDirectories(dirname);
 5             string[] files = Directory.GetFiles(dirname);
 6 
 7             foreach (string dir in dirs)
 8             {
 9                 node.Nodes.Add(dir);
10                 getRootNode(dir);
11             }
12 
13 
14             foreach (string file in files)
15             {
16 
17                     TreeNode fnode = new TreeNode(file);
18                     node.Nodes.Add(fnode);
19                 
20             }
21 
22             return node;
23         }    

结果并不如我想的那样,它只是把根目录下的所有目录遍历并且生成了根结点的子节点而已。结果如下:

只有根结点和一级子节点,子目录下的文件和二级子目录都没了。关键在红色的代码部分,这里我递归了,但是却并没有将生成的子节点加到上一级节点。

关键还是对递归的理解太肤浅了。

下面是改正过得代码和结果:

 public static Boolean createTree(TreeView tree,string dirname)
        {
            TreeNode root;
            if ((root=getRootNode(dirname)) == null)
                return false;
            tree.Nodes.Add(root);
            return true;
        }

        private static TreeNode getRootNode(string dirname)//递归,返回根结点
        {
            TreeNode node = new TreeNode(dirname);
            string[] dirs = Directory.GetDirectories(dirname);
            string[] files = Directory.GetFiles(dirname);

            foreach (string dir in dirs)
            {
                node.Nodes.Add(getRootNode(dir));
            }


            foreach (string file in files)
            {
                if (Path.GetExtension(file) == ".c" || Path.GetExtension(file) == ".h")
                {
                    TreeNode fnode = new TreeNode(file);
                    node.Nodes.Add(fnode);
                }
            }

            return node;
        }

  结果:

在此记录一下,也算是小进步吧

原文地址:https://www.cnblogs.com/HIT-LYT/p/4287413.html