【发布时间】:2018-01-11 22:05:08
【问题描述】:
我尝试了这个源和视频,但在连接到 ftp 时出现连接错误。
来源:
Imports System.IO
Imports System.Net
Public Class MainForm
Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtServer.Select()
End Sub
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
tvServer.Nodes.Item(0).Collapse()
LoadFTPRemote(txtServer.Text, tvServer)
End Sub
Public Sub LoadFTPRemote(ByVal dirpath As String, eTree As TreeView)
eTree.Nodes.Item(0).Nodes.Clear()
eTree.BeginUpdate()
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(dirpath), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.ListDirectory
request.Credentials = New NetworkCredential(txtUsername.Text, txtPassword.Text)
Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
Dim responseStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(responseStream)
Do While reader.Peek() >= 0
Dim nD As TreeNode = New TreeNode(reader.ReadLine())
eTree.Nodes.Item(0).Nodes.Add(nD)
Loop
reader.Close()
response.Close()
eTree.Nodes.Item(0).Expand()
eTree.EndUpdate()
End Sub
Private Sub tvServer_AfterExpand(sender As Object, e As TreeViewEventArgs) Handles tvServer.AfterExpand
tvServer.BeginUpdate()
Dim Node As TreeNode = e.Node
For Each CNode As TreeNode In Node.Nodes
Dim PathBuilder As String = txtServer.Text & ProperRemoteLink(CNode.FullPath)
If Not Path.HasExtension(PathBuilder) Then
CNode.Nodes.Clear()
Dim request As FtpWebRequest = DirectCast(WebRequest.Create(PathBuilder), FtpWebRequest)
request.Method = WebRequestMethods.Ftp.ListDirectory
request.Credentials = New NetworkCredential(txtUsername.Text, txtPassword.Text)
Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
Dim responseStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(responseStream)
Dim strList As New List(Of String)
Do While reader.Peek() >= 0
Dim xNod As TreeNode = New TreeNode(IO.Path.GetFileName(reader.ReadLine()))
CNode.Nodes.Add(xNod)
Loop
reader.Close()
response.Close()
End If
Next
tvServer.EndUpdate()
End Sub
Public Function ProperRemoteLink(ByVal input As String) As String
Dim output As String = input
If input.StartsWith("FTP Server") Then output = input.ToString.Remove(0, 10)
Return output
End Function
Private Sub tvServer_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles tvServer.AfterSelect
lblStatus.Text = txtServer.Text & ProperRemoteLink(e.Node.FullPath)
End Sub
结束类
错误:
System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 参数名称:索引 在 System.Windows.Forms.TreeNodeCollection.get_Item(Int32 索引) 在 c:\users\javad\documents\visual studio 2017\Projects\zbmsdn\zbmsdn\MainForm.vb:line 11 中的 zbmsdn.MainForm.btnLogin_Click(Object sender, EventArgs e) 在 System.Windows.Forms.ToolStripItem.RaiseEvent(对象键,EventArgs e) 在 System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
【问题讨论】:
-
告诉您
index参数超出了有效范围,并且确切地发生在哪里。很明显,首先要做的是找出index使用了什么值以及有效范围是什么。 VS 有一个调试器是有原因的。用它。即使您不知道如何使用断点等,IDE 仍然会在引发异常时为您提供大量信息。不要忽视它。
标签: vb.net ftp explorer ftp-client ftpwebrequest