ftpwebrequest listDirectory方法停止到达结束



我正在使用以下代码在我的FTP服务器上的目录中列出文件。但是,服务器上有2,914个文件,但是在阅读了大约300个后,以下代码停止了。有时会引发以下错误:

远程服务器返回了一个错误:(450)文件不可用(例如,文件忙)。

但是大多数时候它不会丢失错误,它只是停止了,就像完整阅读它们一样。

这是我正在使用的代码。

Dim request As FtpWebRequest = DirectCast(WebRequest.Create(new_path), FtpWebRequest)
request.UseBinary = True
request.EnableSsl = True
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails 
request.Credentials = New NetworkCredential("name", "password")
Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
Dim responseStream As Stream = response.GetResponseStream
Dim number_of_files As Integer = 0
dirlist.Clear()
Try
   Using reader As New StreamReader(responseStream)
     Do While reader.Peek <> -1
        Dim filename = reader.ReadLine
        dirlist.Add(filename)
        number_of_files += 1
     Loop
   End Using
Catch ex As Exception
  add_to_log(log_window, "Error : " + ex.ToString)
End Try
response.Close()
add_to_log(log_window, "Files Found : " + number_of_files.ToString)

我不明白为什么它在到达列表结束之前就停止了。

这基本上是VB.NET变体ftpwebrequest listDirectory不会返回所有文件。

Peek条件是错误的。每当没有准备好的数据时,它都会打破您的循环。

使用此代码:

Using reader As New StreamReader(responseStream)
    While True
        Dim filename As String = reader.ReadLine()
        If filename Is Nothing Then
            Exit While
        Else
            dirlist.Add(filename)
            number_of_files++
        End If
    End While
End Using

相关内容

最新更新