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

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

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

  

   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)
{
9 node.Nodes.Add(dir);
10 getRootNode(dir);
} foreach (string file in files)
{ TreeNode fnode = new TreeNode(file);
node.Nodes.Add(fnode); } return node;
}

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

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

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

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

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

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

  结果:

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

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

上一篇:.net通过iTextSharp.pdf操作pdf文件实现查找关键字签字盖章


下一篇:dedecms如何修改共0页/0条记录为英文版?