• 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;
            }
    

      结果:

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

  • 相关阅读:
    听较强节奏的歌曲,能让你更长时间投入到学习中
    小康网站维护笔记
    apache基础
    python安装多版本
    apache负载调优
    docker 进阶
    openstack 网络更改版
    linux 搭建testlink的问题总结
    26. Remove Duplicates from Sorted Array(LeetCode)
    Add to List 172. Factorial Trailing Zeroes(LeetCode)
  • 原文地址:https://www.cnblogs.com/HIT-LYT/p/4287413.html
Copyright © 2020-2023  润新知