关于遍历服务器上路径,及路径下文件(回答就给分!回答满意可追加!) 本帖最后由 lupct 于 2010-05-13 11:26:02 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本篇提供遍历TreeView的方法(转)一 归根结底就是用递归跟树TreeView的初始化是类似的1 TreeNodeCollection 做参数(这个是找一个checked node,可以替换以相应的处理)调用时用:Check(treeMenu.Nodes);// treeMenu.Nodes 就只是一个根节点 /// <summary> /// 遍历TreeView 这里不能用TreeView做参数(无法递归TreeNode不能转换成TreeView),只能用 根节点后在是 节点集合 /// </summary> /// <param name="tvtemp">节点集 书的nodes集就是它的根节点</param> protected void Check(TreeNodeCollection tvtemp) { foreach (TreeNode temp in tvtemp) { if (temp.Checked == true) { temp.Checked = false; break; } if (temp.ChildNodes.Count != 0)//如果是iewc:treeview直接写temp.Nodes { Check(temp.ChildNodes); } } } 2 根节点做参数 protected void AllCheck(TreeNode root) { if (root.ChildNodes.Count != 0) foreach (TreeNode temp in root.ChildNodes) { if (temp.Checked == true) { //do what you want } if (temp.ChildNodes.Count != 0) { AllCheck(temp.ChildNodes); } } } 先递归所有的文件夹和文件,记录两个东西,深度和路径,作为TreeView的数据源,绑定后深度值为TreeView的node深度,路径为节点的显示值 二 使用栈遍历TreeView /// <summary> /// 非递归后序遍历二叉树 /// =Color.Red 表示从右进入 /// =Color.Lavender表示从左进入 /// ==Color.Red 表示从右回来 /// </summary> /// <param name="tn">当前子树的根</param> /// <param name="lv">保存结果的列表</param>le="COLOR: #0000ff">private void PreTraWithoutRecurtion(TreeNode tn, ListBox lv) { Stack stack = new Stack(); while (tn.ChildNodes.Count != 0) { lv.Items.Add(tn.Text); stack.Push(tn); tn = tn.ChildNodes[0]; } lv.Items.Add(tn.Text); while (stack.Count != 0) { TreeNode tn1 = (TreeNode)stack.Pop(); //if (tn.ChildNodes.Count > 1) //{ for (int i = 1; i < tn1.ChildNodes.Count; i++) { tn = tn1.ChildNodes[i]; while (tn.ChildNodes.Count != 0) { lv.Items.Add(tn.Text); stack.Push(tn); tn = tn.ChildNodes[0]; } lv.Items.Add(tn.Text); } //} } } private void GetTreeViewAll(TreeNode tn, ListBox lv) { lv.Items.Add(tn.Text); Stack stack = new Stack(); for (int i = 0; i < tn.ChildNodes.Count; i++) { if (tn.ChildNodes[i].ChildNodes.Count > 0) { stack.Push(tn.ChildNodes[i]); } lv.Items.Add(tn.ChildNodes[i].Text); } while (stack.Count > 0) { TreeNode outTn = (TreeNode)stack.Pop(); for (int i = 0e="COLOR: #000000">; i < outTn.ChildNodes.Count; i++) { if (outTn.ChildNodes[i].ChildNodes.Count > 0) { stack.Push(outTn.ChildNodes[i]); } lv.Items.Add(outTn.ChildNodes[i].Text); } } } 左侧TREEVIEW 我已经遍历出路径,代码如下:/// <summary> /// 遍历目录 绑定到Treeview /// </summary> /// <param name="FileFolder">绝对路径</param> private void LoadFileFolder(string FileFolder) { DirectoryInfo dir = new DirectoryInfo(FileFolder); if (dir.Exists) { foreach (DirectoryInfo d in dir.GetDirectories()) //查找子目录 { TreeNode rootNode = new TreeNode(); LoadFileFolder(dir + d.ToString() + "\\"); rootNode.Text = d.Name; rootNode.Value = dir + d.ToString() + "\\"; TreeView1.Nodes.Add(rootNode); rootNode.Expanded = false; rootNode.Selected = false; if (d.Exists) { foreach (DirectoryInfo dd in d.GetDirectories()) { TreeNode Node = new TreeNode(); Node.Text = dd.Name; Node.Value = dir + "\\" + d.ToString() + "\\"; rootNode.ChildNodes.Add(Node); foreach (FileInfo f in d.GetFiles("*.*")) //查找文件 { TreeNode Nodee = new TreeNode(); Nodee.Text = f.Name; Nodee.Value = f.Name; Node.ChildNodes.Add(Nodee); } } } } } }假设服务器上路径 只有2层深度,我只想要在右侧显示选中节点目录下的所有文件 该如何做,跪求高手指点! 这句不可以么?把d.GetFiles填充到你右侧的控件就好了么 foreach (FileInfo f in d.GetFiles("*.*")) //查找文件 { TreeNode Nodee = new TreeNode(); Nodee.Text = f.Name; Nodee.Value = f.Name; Node.ChildNodes.Add(Nodee); } 控件建议用listview的detail视图其实用多行文本框什么的也可以.呵呵 如何实现注册就给用户一个他自己的主页??/急 asp.net的网站后台怎么调用静态页的模板,生成静态页? 两种方法读取数据库中图片,一种行,另一种不行,何解? 求助:通常每个套接字地址(协议/网络地址/端口)只允许使用一次 技术难题,浏览器看另一客户端传送的视频!! 有谁知道串口通信? 关于IE地址栏及标准按钮的控制,请大家帮帮小弟!!!! 100分求一个自动化仓库出入库策略的源码 新手求一个完成的C#画渐开螺旋线代码 软件的换皮肤功能是如何实现的? 怎么获取gridview中最大的年龄 外网 wsDualHttpBinding 绑定来实现回调 急死了 !!!都快半个月了还没解决
/// 遍历TreeView 这里不能用TreeView做参数(无法递归TreeNode不能转换成TreeView),只能用 根节点后在是 节点集合
/// </summary>
/// <param name="tvtemp">节点集 书的nodes集就是它的根节点</param>
protected void Check(TreeNodeCollection tvtemp)
{
foreach (TreeNode temp in tvtemp)
{
if (temp.Checked == true)
{
temp.Checked = false;
break;
}
if (temp.ChildNodes.Count != 0)//如果是iewc:treeview直接写temp.Nodes
{
Check(temp.ChildNodes);
}
}
}
2 根节点做参数 protected void AllCheck(TreeNode root)
{
if (root.ChildNodes.Count != 0)
foreach (TreeNode temp in root.ChildNodes)
{
if (temp.Checked == true)
{
//do what you want
}
if (temp.ChildNodes.Count != 0)
{
AllCheck(temp.ChildNodes);
}
}
}
作为TreeView的数据源,绑定后深度值为TreeView的node深度,路径为节点的显示值
/// 非递归后序遍历二叉树
/// =Color.Red 表示从右进入
/// =Color.Lavender表示从左进入
/// ==Color.Red 表示从右回来
/// </summary>
/// <param name="tn">当前子树的根</param>
/// <param name="lv">保存结果的列表</param>
le="COLOR: #0000ff">private void PreTraWithoutRecurtion(TreeNode tn, ListBox lv)
{
Stack stack = new Stack(); while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
while (stack.Count != 0)
{
TreeNode tn1 = (TreeNode)stack.Pop();
//if (tn.ChildNodes.Count > 1)
//{
for (int i = 1; i < tn1.ChildNodes.Count; i++)
{
tn = tn1.ChildNodes[i];
while (tn.ChildNodes.Count != 0)
{
lv.Items.Add(tn.Text);
stack.Push(tn);
tn = tn.ChildNodes[0];
}
lv.Items.Add(tn.Text);
}
//} } }
private void GetTreeViewAll(TreeNode tn, ListBox lv)
{
lv.Items.Add(tn.Text);
Stack stack = new Stack();
for (int i = 0; i < tn.ChildNodes.Count; i++)
{
if (tn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(tn.ChildNodes[i]);
}
lv.Items.Add(tn.ChildNodes[i].Text);
}
while (stack.Count > 0)
{
TreeNode outTn = (TreeNode)stack.Pop();
for (int i = 0e="COLOR: #000000">; i < outTn.ChildNodes.Count; i++)
{
if (outTn.ChildNodes[i].ChildNodes.Count > 0)
{
stack.Push(outTn.ChildNodes[i]);
}
lv.Items.Add(outTn.ChildNodes[i].Text);
}
}
}
/// <summary>
/// 遍历目录 绑定到Treeview
/// </summary>
/// <param name="FileFolder">绝对路径</param>
private void LoadFileFolder(string FileFolder)
{
DirectoryInfo dir = new DirectoryInfo(FileFolder);
if (dir.Exists)
{
foreach (DirectoryInfo d in dir.GetDirectories()) //查找子目录
{
TreeNode rootNode = new TreeNode();
LoadFileFolder(dir + d.ToString() + "\\");
rootNode.Text = d.Name;
rootNode.Value = dir + d.ToString() + "\\";
TreeView1.Nodes.Add(rootNode);
rootNode.Expanded = false;
rootNode.Selected = false;
if (d.Exists)
{
foreach (DirectoryInfo dd in d.GetDirectories())
{
TreeNode Node = new TreeNode();
Node.Text = dd.Name;
Node.Value = dir + "\\" + d.ToString() + "\\";
rootNode.ChildNodes.Add(Node);
foreach (FileInfo f in d.GetFiles("*.*")) //查找文件
{
TreeNode Nodee = new TreeNode();
Nodee.Text = f.Name;
Nodee.Value = f.Name;
Node.ChildNodes.Add(Nodee);
}
}
}
}
}
}
假设服务器上路径 只有2层深度,我只想要在右侧显示选中节点目录下的所有文件 该如何做,跪求高手指点!
把d.GetFiles填充到你右侧的控件就好了么
foreach (FileInfo f in d.GetFiles("*.*")) //查找文件
{
TreeNode Nodee = new TreeNode();
Nodee.Text = f.Name;
Nodee.Value = f.Name;
Node.ChildNodes.Add(Nodee);
}
其实用多行文本框什么的也可以.呵呵