用递归方法实现简单文本小说阅读器
Form1.cs代码:
View Code
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace 小说阅读器V3._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnSelect_Click(object sender, EventArgs e) { if (fbdSelect.ShowDialog() == DialogResult.OK) { //选择目录路径 txtPath.Text = fbdSelect.SelectedPath; } #region 获得第一层目录或文件的节点 //string path = txtPath.Text; //string genName = Path.GetFileName(path); //获取根节点的名称 //TreeNode tnGen = new TreeNode(genName); //新建一个根节点 //tvReader.Nodes.Add(tnGen); //把根节点加到tvReader这个TreeView空间中 //string[] dirs = Directory.GetDirectories(path); //获得此根节点下所有的子目录(路径) //for (int i = 0; i < dirs.Length; i++) //遍历子目录 //{ // string dirName=Path.GetFileName(dirs[i]); //获得目录的名称 // TreeNode tn = new TreeNode(dirName); //新建子目录节点 // tnGen.Nodes.Add(tn); //把子目录加入到根目录的节点下 //} //添加根目录下所有子文件的节点 //string[] files=Directory.GetFiles(path); //for (int i = 0; i < files.Length; i++) //{ // string fileName = Path.GetFileName(files[i]); // TreeNode tn = new TreeNode(fileName); // tnGen.Nodes.Add(tn); //} #endregion string path = txtPath.Text; string genName=Path.GetFileName(path); TreeNode tnGen=new TreeNode(genName); tnGen.Tag = ""; //节点的Tag属性表示附件到节点上的信息,比如节点路径。 tvReader.Nodes.Add(tnGen); BindTree(path,tnGen); } //把“获得第一层目录或文件的节点”封装成一个递归方法 private void BindTree(string path,TreeNode tnGen) { //string genName = Path.GetFileName(path); //tnGen.Nodes.Add(genName); string[] dirs = Directory.GetDirectories(path); for (int i = 0; i < dirs.Length; i++) { string dirName = Path.GetFileName(dirs[i]); TreeNode tn = new TreeNode(dirName); tn.Tag = ""; tnGen.Nodes.Add(tn); //调用本方法,实现递归:查找此目录下的子目录和文件,如果子目录中存在子目录,就一直沿着目录探下去,直到最后的一个子目录,这个子目录里面没有子目录了,只有文件。 //然后从最低层向上依次返回目录节点和文件节点 BindTree(dirs[i], tn); } //在根目录下添加子文件的节点 string[] files = Directory.GetFiles(path); for (int i = 0; i < files.Length; i++) { string fileName = Path.GetFileNameWithoutExtension(files[i]); TreeNode tn = new TreeNode(fileName); tn.Tag = files[i]; tnGen.Nodes.Add(tn); } } private void tvReader_AfterSelect(object sender, TreeViewEventArgs e) { string path = ""; //如果所点击的节点的路径返回的是一个文件的则执行方法体 if (File.Exists(path=e.Node.Tag.ToString())) { string fileExtension=Path.GetExtension(path); if (fileExtension != ".txt") { txtShow.Text = "对不起,您所选择的文件不是文本文件,无法正常显示!"; return; } //读取节点路径的内容显示到右边的textbox中 //注意加上本地系统默认的编码格式,否则可能会乱码。 txtShow.Text = File.ReadAllText(path,Encoding.Default); } } } }
源码下载:小说阅读器V3.0.rar