使用递归+.Net FtpWebRequest获得远程服务器的目录结构树2011-05-13 博客园 纳奇.TechTreeView1是.Net TreeView控件。请在WinForm界面上添加一个控件Form1_load中的Dec是实例化ftpClient.vb的一个对象,ftpDetails是用来存储FTP登录凭据的。Form1.vb1Public Class Form1Class Form1 2 3 Dim ftp As ftpClient 4 Dim LocalFileList As New DataTable 5 6 Private Sub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 7 Dim Dec As New ftpClient.FtpDetails("www.cnblogs.com", 21, "cnblogVIP", "**********") 8 ftp = New ftpClient(Dec) 9 loadFtpTree(TreeView1.Nodes, "") "调用此代码可以装载远程FTP结构树 10 11 End Sub 12 13 "这个方法用于获得远程目录及文件树 14 Private Sub loadFtpTree()Sub loadFtpTree(ByVal Nodes As TreeNodeCollection, ByVal Path As String) 15 ""获得各级分类 16 Dim sNode As Integer = -1 17 ""通过FTP获得当前目录列表 18 Dim result As String = ftp.GetFileList(Path) 19 Dim files() As String = Split(result, vbCrLf) "把FTP服务器返回的文本,分离出是目录还是文件,文件或目录名,文件大小 20 Dim ffi As New ftpClient.FtpListFileInfo 21 If files.Length > 0 Then 22 "加载节点 23 Dim I As Integer 24 For I = 0 To files.Length - 2 25 ffi.ParserString(files(I)) "对返回的单行做分割。分离出是目录还是文件,文件或目录名,文件大小 26 If ffi.IsDirectory = True And ffi.FileName <> ".." And ffi.FileName <> "." Then "如果是有效的目录。 27 sNode += 1 28 Nodes.Add(0, ffi.FileName) "由于是目录,前面的参数保存了类似.Tag一样的作用,这里保存了文件的size 29 Dim newpath As String = Path + "/" + ffi.FileName "FileName如果是文件表示文件名,否则表示目录名 30 Application.DoEvents() 31 "读取当前节点的子节点加载() 32 loadFtpTree(Nodes(sNode).Nodes, newpath) "递归检查当前目录下是否有子目录 33 ElseIf ffi.IsDirectory = False Then "如果是文件 34 sNode += 1 35 Nodes.Add(ffi.FileSize.ToString, ffi.FileName) "加入到节点中 36 End If 37 Next 38 End If 39 TreeView1.ExpandAll() 40 End Sub