TreeView无限节点代码(FTP服务器中的文件和文件名为例)

来源:互联网 发布:手机管理网络的软件 编辑:程序博客网 时间:2024/06/11 06:14

C#TreeView无限开辟新子节点

   在这个庞大的数据体系中,每个目录下每个文件都需要进行有序的排序,又或者说在原本目录中还存在子级目录。这时候就需要有条理的排序,方便用户进行梳理及一目了然的作用。例如FTP(文件传输协议)服务器主要功能是对文件的上载,下载等操作。

木字桐



上面是我代码大概架构的思路,下面是我实现这个过程代码:


         /*         * 此TreeView可以无限创建节点         */        TreeNode tn1 = null;//深度根节点        TreeNode tn2 = null;//深度N节点        /// <summary>        /// 初始化FTP后端页面        /// </summary>        private void FTPWeb_Load(object sender, EventArgs e)        {            try            {                FtpWebRequest ftpfwReq;                FtpWebResponse ftpfwRes;                ftpfwReq = (FtpWebRequest)FtpWebRequest.Create("ftp://"+"192.168.1.101");                ftpfwReq.Credentials = new NetworkCredential(FTPUID, FTPPWD);                ftpfwReq.KeepAlive = true;                ftpfwReq.UseBinary = true;                ftpfwReq.Method = WebRequestMethods.Ftp.ListDirectory;                ftpfwRes = (FtpWebResponse)ftpfwReq.GetResponse();                StreamReader sr = new StreamReader(ftpfwRes.GetResponseStream(),Encoding.UTF8);                string line = sr.ReadLine();                //根目录比如深度1                while (line != null)                {                    tn1 = new TreeNode(line);//开辟新节点(根节点)                    this.treeView1.Nodes.Add(tn1);//TreeView指向tn1                    if(System.IO.Path.GetExtension(line) == "")                    {                        DirShenDuXia = DirShenDuShan + "/" + line;                        DirectoryExist(tn1);//进入下一层深度                    }                    line = sr.ReadLine();                }                ftpfwRes.Close();                sr.Close();            }            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }        } string DirShenDuShan = "ftp://"+"192.168.1.101";//ftp目录地址上一层        string DirShenDuXia = "";//ftp目录地址下一层        /// <summary>        /// 子节点N重遍历        /// </summary>        /// <param name="Gentn">根节点</param>        private void DirectoryExist(TreeNode Gentn)        {            FtpWebRequest ftpfwReq;            FtpWebResponse ftpfwRes;            string ip = DirShenDuShan;//保存上一层深度(如果上一层深度所有遍历未完成)一般是深度2            try            {                #region FTP                ftpfwReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(DirShenDuXia));                ftpfwReq.Credentials = new NetworkCredential(FTPUID, FTPPWD);                ftpfwReq.KeepAlive = true;                ftpfwReq.UseBinary = true;                ftpfwReq.Method = WebRequestMethods.Ftp.ListDirectory;                ftpfwRes = (FtpWebResponse)ftpfwReq.GetResponse();                Stream s = ftpfwRes.GetResponseStream();                StreamReader sr = new StreamReader(s, Encoding.UTF8);                string line = sr.ReadLine();                 #endregion                //深度N                while (line != null)//判断文件夹中是否存在文件/目录                {                       tn2 = new TreeNode(line);//开辟新节点                    Gentn.Nodes.Add(tn2);//上个节点指向下个节点                    if (System.IO.Path.GetExtension(line) == "")                    {                        DirShenDuShan = DirShenDuXia;//保存上一层地址                        DirShenDuXia += "/" + line;//追加下一层地址                        DirectoryExist(tn2);//上一层指向下一层深度(比如这里是深度3)                    }                    line = sr.ReadLine();                }                //每次深度N遍历完毕后                if (line == null) {                    DirShenDuShan = "ftp://"+"192.168.1.101";                    DirShenDuXia = ip;                }                ftpfwRes.Close();                sr.Close();            }            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }        }

    上面代码主要无限开辟新节点的代码只有两三句。主要是实现过程比较绕,除了根目录在,其他深度节点都在一个函数中递归循环。


实现无限开辟的节点的代码只有:

    //深度1    TreeNode GenTn = new TreeNode(“根节点”);    TreeView1.Nodes.Add(GenTn);    //深度2    TreeNode ZiTn = new TreeNode(“深度2”);    GenTn.Nodes.Add(ZiTn);    //深度N    GenTn = ZiTn;//深度2节点替代深度1节点    ZiTn = new TreeNode(“深度N”);//开辟深度N节点    GenTn.Nodes.Add(ZiTn);//深度2增加深度N子节点

     主要逻辑方面是每次根节点和子节点都在发生变化,比如深度1为根节点,深度2为子节点。如果深度2下的存在符合可开辟新节点的条件,那么深度2为新的根节点则新开辟的深度3为新的子节点。

     这段代码用了我一个周末的时间做出来的,中间推翻了好几次重新来过,毕竟在网上找不到我理想中的答案,自己做的可能也不是很完善。但大家觉得有用可以借鉴学习。

代码实现示例图: