【问题标题】:FtpWebRequest ListDirectory method stopping before reaching the endFtpWebRequest ListDirectory 方法在到达终点之前停止
【发布时间】:2017-09-06 14:12:02
【问题描述】:

我正在使用以下代码列出我的 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)

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

【问题讨论】:

    标签: .net vb.net ftp stream ftpwebrequest


    【解决方案1】:

    这基本上是 VB.NET 的变体 FtpWebRequest ListDirectory does not return all files.

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-07
      • 2023-03-22
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多