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为新的子节点。
这段代码用了我一个周末的时间做出来的,中间推翻了好几次重新来过,毕竟在网上找不到我理想中的答案,自己做的可能也不是很完善。但大家觉得有用可以借鉴学习。
代码实现示例图:
阅读全文
1 0
- TreeView无限节点代码(FTP服务器中的文件和文件名为例)
- python ftp 文件上传和文件下载
- vc中treeview显示磁盘目录和文件代码
- SQLserver数据库中的文件和文件组
- linux中的文件压缩和文件解压缩
- Struts2中的文件上传和文件下载
- 利用Socket 实现 FTP 文件上传和文件下载
- 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取)
- 使用TreeView实现无限级扩展节点(原创)
- 流和文件(文件的保存)
- 文件和文件组
- 异步的多文件上传和文件存储代码
- ASP.NET - 填充 TreeView Web 服务器控件中的树节点
- SQL Server 2005中的文件和文件组
- SQL Server 2005中的文件和文件组(ㄧ)
- SQL Server 2005中的文件和文件组
- SQL Server 2005中的文件和文件组
- SQL Server 2005中的文件和文件组(二)
- CClientDC
- 【MFC】获取系统当前时间
- JSP 中EL表达式用法详解
- 各种排序
- 如何设置EditPlus保存时不自动生成.bak文件
- TreeView无限节点代码(FTP服务器中的文件和文件名为例)
- 多线程中的Callable接口中的Futrue对象
- 用递归实现国王分橘子问题 C++
- 字符串哈希(Hash模板)
- 技术广度和难度
- Linux系统编程——进程的介绍
- 33STL之Map和multimap容器
- Java面试笔试题大汇总(最全+详细答案)
- caffe:将图像转化为LMDB格式文件