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

      结果:

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

  • 相关阅读:
    在Python下调用Labview
    CVX: Matlab Software for Disciplined Convex Programming
    ANSYS Electronics Desktop 调出HFSS模块
    在python下打开cmd,并调用其他py文件
    CVXOPT的安装
    分享小记:指数族分布
    应用运筹学基础:线性规划 (4)
    应用运筹学基础:线性规划 (3)
    应用运筹学基础:线性规划 (2)
    白话论文:A Tutorial on Principal Component Analysis
  • 原文地址:https://www.cnblogs.com/HIT-LYT/p/4287413.html
Copyright © 2020-2023  润新知