利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。
利用TreeView控件加载文件,必须遍历处所有的文件和文件夹。
深搜算法用到了递归。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; namespace 文本文件 {
//public partial class Form1 : Form {
// public Form1() {
// InitializeComponent();
// } // private void Form1_Load(object sender, EventArgs e) {
// string path = "DelegetTestSpace";
// string[] dirs = Directory.GetDirectories(path);
// string[] files = Directory.GetFiles(path); // TreeNode node = new TreeNode("DelegetTestSpace");
// tvContentOfTable.Nodes.Add(node);
// node.ImageIndex = 0;
// node.SelectedImageIndex = 0;
// DFS(path, node);
// }
// // 采用深度优先算法加入节点。
// private static void DFS(string path, TreeNode node) {
// string[] dirs = Directory.GetDirectories(path);
// string[] files = Directory.GetFiles(path); // foreach (string dir in dirs) {
// TreeNode subnode = node.Nodes.Add(Path.GetFileName(dir));
// subnode.ImageIndex = 0;
// subnode.ImageIndex = 0;
// DFS(dir,subnode);
// }
// foreach (string file in files) {
// TreeNode filenode = node.Nodes.Add(Path.GetFileName(file));
// filenode.ImageIndex =1;
// filenode.SelectedImageIndex = 1;
// // 这个tag里面包含了这个文件的完整路径。是这个节点的附加信息。
// filenode.Tag = file;
// }
// } // private void tvContentOfTable_AfterSelect(object sender, TreeViewEventArgs e) {
// // 一般的,在EventArgs前面有内容,都是当前的信息。这里指的是点击的节点 古可以得到这个节点的附加信息。
// string tag; // // 文件夹节点没有tag
// if (e.Node.Tag != null) {
// tag = e.Node.Tag.ToString();
// tbContent.Text = File.ReadAllText(tag, Encoding.Default);
// }
// } //}
下面是宽搜,用到一个全局队列。
public partial class Form1:Form {
public Form1() {
InitializeComponent();
}
public struct dictionary {
public TreeNode node;
public string str;
}
Queue<dictionary> queue = new Queue<dictionary>();
private void Form1_Load(object sender, EventArgs e) {
string path = "DelegetTestSpace";
dictionary dic = new dictionary();
dic.node = new TreeNode(path);
dic.str = path;
tvContentOfTable.Nodes.Add(dic.node);
BFS(dic);
}
private void BFS(dictionary dic) {
dictionary temp = new dictionary();
queue.Enqueue(dic);
while (true) {
if (queue.Count==0) {
break;
}
temp = queue.Dequeue();
TreeNode node = temp.node;
string str = temp.str;
string[] dirs = Directory.GetDirectories(str);
string[] files = Directory.GetFiles(str);
//入队文件夹
foreach (string dir in dirs) {
string lastName = Path.GetFileName(dir);
TreeNode subNode = new TreeNode(lastName);
dictionary subDic = new dictionary();
subDic.node = subNode;
subDic.str = dir;
queue.Enqueue(subDic);
node.Nodes.Add(subNode);
}
//入队文件
foreach (string file in files) {
dictionary fileDic = new dictionary();
string lastName = Path.GetFileName(file);
fileDic.node = new TreeNode(lastName);
fileDic.node.Tag = file;
node.Nodes.Add(fileDic.node);
}
}
}
private void tvContentOfTable_AfterSelect(object sender, TreeViewEventArgs e) {
// 一般的,在EventArgs前面有内容,都是当前的信息。这里指的是点击的节点 古可以得到这个节点的附加信息。
string tag;
// 文件夹节点没有tag
if (e.Node.Tag != null) {
tag = e.Node.Tag.ToString();
tbContent.Text = File.ReadAllText(tag, Encoding.Default);
}
}
其中,用到了一个imageList组件,用它来提供一个节点的图像。
效果如图。
利用深搜和宽搜两种算法解决TreeView控件加载文件的问题。的更多相关文章
- 最小生成树算法 prim kruskal两种算法实现 HDU-1863 畅通工程
最小生成树 通俗解释:一个连通图,可将这个连通图删减任意条边,仍然保持连通图的状态并且所有边权值加起来的总和使其达到最小.这就是最小生成树 可以参考下图,便于理解 原来的图: 最小生成树(蓝色线): ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
参考网址:图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) - 51CTO.COM 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath ...
- 中间自适应,左右定宽的两种经典布局 ---- 圣杯布局 VS 双飞翼布局
一.引子 最近学了些js框架,小有充实感,又深知如此节奏的前提需得基础扎实,于是回头想将原生CSS和Javascript回顾总结一番,先从CSS起,能集中它的就在基础的布局上,便查阅了相关资料,将布局 ...
- php两种include加载文件方式效率比较如下
1)定义一个字符串变量,里面保存要加载的文件列表.然后foreach加载. $a = '/a.class.php;/Util/b.class.php;/Util/c.class.php'; $b = ...
- mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
win10很完美,用的也很舒服!当然人无完人,也总有不尽如人意的时候.比如说我们经常用的远程mstsc,就出现了一个坑,既然出现坑了,我们就得把坑解决掉吧!下面就记录一下这个坑的解决方法. 本文地址: ...
- 前台获取json未定义问题之两种常用解决办法
来自博客园的一位朋友解答: 为什么要 eval这里要添加 “("("+data+")");//”呢? 原因在于:eval本身的问题. 由于json是以”{}”的 ...
- HDU 1160 排序或者通过最短路两种方法解决
题目大意: 给定一堆点,具有x,y两个值 找到一组最多的序列,保证点由前到后,x严格上升,y严格下降,并把最大的数目和这一组根据点的编号输出来 这里用两种方法来求解: 1. 我们可以一开始就将数组根据 ...
- 两种方法解决 "The License CNEKJPQZEX- has been cancelled..." 问题
今天在使用 2017 的 IDEA 和 Pycharm 等IDE的时候,提示了如题的问题.之前实在 http://idea.lanyus.com/ 网站点击生成注册码,复制粘贴到 IDEA 中就好了, ...
- 「每日五分钟,玩转JVM」:两种算法
前言 上篇文章,我们了解了GC 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象. 引用计数算法 引用计数法的原理很简单,就是在对象中维护一个计数器,当 ...
随机推荐
- Unity and C#: Game Loop (Awake, Start, Update)
Introduction The central component of any game, from a programming standpoint, is the game loop. It ...
- hdu 5661 Claris and XOR
Claris and XOR Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 影响Java EE性能的十大问题(转)
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...
- unity发布安卓 手指控制物体缩放和旋转
直接帮到物体的身上就可以了 using UnityEngine; using System.Collections;using System.IO;public class hehe : MonoBe ...
- ABP框架详解(五)Navigation
ABP框架中的Navigation功能用于管理业务系统中所有可用的菜单导航控件,通常在业务系统的首页会有一个全局性的导航菜单,JD商城,天猫,猪八戒网莫不如是.所以为方便起见,Navigation功能 ...
- Git凭证存储(简单易懂,一学就会,认真看)
今天给自己提了一个问题,当我们在github.com或者gitlab上面新建仓库,并克隆到本地,首次使用的时候,会被问及用户名密码,但是这两个信息存在哪里呢? 带着这个问题,我开始搜索,并在<P ...
- unity初始篇 选择游戏对象
之前两任社长都在一直强调要写博客,一直没有写过,现在我已经踏上了博客的道路! 首先声明:本人才疏学浅,对unity认识不深,有错误的地方欢迎大家指出,在此谢过! 本文所说的选择对象,是指在游戏过程中动 ...
- 字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串
Visual Studio提供的Dotfuscator保护程序,可以对用户代码中包含的字符串进行加密.比如下面的例子,为了找到这个程序的注册算法,用.NET Reflector加载程序集后,发现代码中 ...
- 使用Immutable优化复制注意事项
这是Orleans中对于序列化检查类型是否支持Orleans内置的高速序列化时,使用Immutable<>包装和类型声明时,有ImmutableAttribute,效果是一样的.所以无需重 ...
- Xamarin 跨移动端开发系列(01) -- 搭建环境、编译、调试、部署、运行
如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!好了,废话不多说,就开始吧, ...