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;
}
结果并不如我想的那样,它只是把根目录下的所有目录遍历并且生成了根结点的子节点而已。结果如下:

只有根结点和一级子节点,子目录下的文件和二级子目录都没了。关键在红色的代码部分,这里我递归了,但是却并没有将生成的子节点加到上一级节点。
关键还是对递归的理解太肤浅了。
下面是改正过得代码和结果:
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控件遍历文件夹下所有子文件夹以及文件的更多相关文章
- 基于Treeview控件遍历本地磁盘
一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...
- 用TreeView控件遍历磁盘目录
实现效果: 知识运用: ListView控件中Items集合的Add方法 TteeView控件中Nodes集合的Add方法 实现代码: private void Form1_Load(object ...
- [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...
- Visual Studio 2010下ASPX页面的TreeView控件循环遍历
如果维护一个老系统就总会遇到各种问题,而这次是TreeView的循环遍历.对于Visual Studio2010上aspx页面的TreeView控件,我感受到了什么叫集微软之大智慧.与二叉树型不一样. ...
- Delphi下Treeview控件基于节点编号的访问
有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下: function GetGlobeNumCode(inNode:T ...
- Delphi下Treeview控件基于节点编号的访问1
有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下: function GetGlobeNumCode(inNode:T ...
- Win32中TreeView控件的使用方法,类似于资源管理器中文件树形显示方式
首先是头文件,内容如下: #include <tchar.h> #include "..\CommonFiles\CmnHdr.h" #include <Wind ...
- TreeView控件使用
treeView1.SelectedNode = treeView1.Nodes[0]; //选中当前treeview控件的根节点为当前节点添加子节点: TreeNode tmp; tmp = n ...
- 利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹. 深搜算法用到了递归. using System; using System.Collections.Generic; using Sy ...
随机推荐
- 只需三步 快速完善网站Sitemap
越来越多的SEOer把优化的重点放在了站内优化上,细心的朋友应该查看一些前辈的robots.txt的时候不难发现,他们的robots中都加 入了一句Sitemap: http://www.dewang ...
- js将金额专成每隔3位数加逗号
js将金额专成每隔3位数加逗号,比如 12345.00 转成 12,345.00; 懒得解释具体代码如下 //分割 String.prototype.joinByNum = function(num, ...
- vs2010配置boost编程环境(照抄并简化)
第一步:下载boost,我下载的方法是从http://www.boost.org/上找最新的下载.名字叫boost_1_50_0.7z. 第二步:在D盘(我C盘空间不大,准备出至少10G的空间吧)创建 ...
- 汇编语言进阶和Makefile进阶---第二天
摘要: 原创博文:转载请标明出处:http://www.cnblogs.com/zxouxuewei 首先加载启动代码: ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序装载地 ...
- cat /proc/devices 和ls /dev
对于新手来讲,linux的框架实在是太庞大,况且很多知识点需自己做才能理解 设备 文件 ,设备编号 #ll -a /dev 在每一行都可以看到设备文件.设备编号(主.次) 对于每种硬件设备,系统 ...
- #ifndef 的用法
背景: 头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,会引起大量的声明冲突,这时候需 ...
- 浏览器angent分析工具
cz.mallat.uasparser.UserAgentInfo info = null; info = uasParser.parse(userAgent);
- 自执行函数与setTimeout结合计算
var v1=0,v2=0,v3=0; for(var i=1;i<=3;i++){ var i2=i; (function(){ ...
- FPGA书籍
Xilinx FPGA开发实用教程(第2版) 徐文波,田耘 著
- JavaScript 常用小功能
判断一个是否是隐藏状态 $(curid).is(":visible") 响应回车 $("#password").keydown(function (e) { ...