用递归方法实现简单文本小说阅读器

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

posted @ 2013-04-10 12:25  IT浪潮之巅  阅读(320)  评论(0编辑  收藏  举报
   友情链接: 淘宝优惠券