利用深搜和宽搜两种算法解决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 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象. 引用计数算法 引用计数法的原理很简单,就是在对象中维护一个计数器,当 ...
随机推荐
- JAVA CAS原理深度分析-转载
参考文档: http://www.blogjava.net/xylz/archive/2010/07/04/325206.html http://blog.hesey.net/2011/09/reso ...
- 微信公共平台开发-(.net实现)2--ACCESSTOKEN值获得
成功的走出第一步后,我们紧接着趁热打铁开始下一步: 成为了开发者之后微信平台会给您AppId和AppSecret,在订阅号中是没有的,所以因该申请一下服务号, 若没有请注意上一篇http://www. ...
- SQL语言分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 数据定义语言DDL,数据控制语言DCL. 1 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHER ...
- Javascript自己动手实现getter/setter
虽然ES5中为我们提供了Object.defineProperty方法来设置getter与setter,但此原生方法使用起来并不方便,我们何不自己来实现一个类,只要继承该类并遵循一定的规范就可以拥有媲 ...
- 【源码笔记】Nop定时任务
网站需要定时执行不同的任务,比如清理无效的数据.定时发送mail等,Nop的这个定时任务设计比较好,简单的说就是将所有任务相同的属性持久化,具体的执行通过继承接口来实现. 持久化对象:Schedule ...
- Wix 安装部署教程(十三) -- 多语言安装包
这几天摸索WIX的多语言安装包(这里是Wix的setup 工程,不是Bundle),终于走通了,感谢网友uni的指点.WIX的多语言安装包能够根据系统环境自动切换界面语言,你也可以通过命令指定语言.下 ...
- 记一次Url重写_发布之后iis 404
把api封装完,客户要求app的url能不能不变(客户之前用的php的api开发app,已经开发了很多了,所以希望不改动url).但是这个规则要求是:xx/api.php?s=/{controller ...
- ECMAScript 6 简介
ECMAScript 6 是JavaScript的下一个标准,正处在快速开发之中,大部分已经完成了,预计将在2014年正式发布.Mozilla将在这个标准的基础上,推出JavaScript 2.0. ...
- [安卓] 16、ListView和GridView结合显示单元实现自定义列表显示效果
List在各种手机应用中都有体现,是安卓UI设计的必修课. 本文将介绍在开发中如何利用ListView和GridView设计自定义列表. 下面分别是用ListView和GridView做的效果: 上面 ...
- Linux C/C++的编译
以前在Linux上面编译过C,但是没有编译过C++,今天用到了,就稍微学习了一下. 简单的介绍 linux 中最重要的编译工具是 GCC.GCC 是 GNU 的 C 和 C++ 编译器.实际上,GCC ...