2017-06-05 81 views
1

我觉得这段代码从FTP下的目录和子目录中下载图像文件:
C# Download all files and subdirectories through FTP图像文件从FTP下载0字节

所以这是我在VB.NET代码:

Private Sub DownloadFtpDirectory(ByVal url As String, ByVal credentials As NetworkCredential, ByVal localPath As String) 
    Dim listRequest As FtpWebRequest = CType(WebRequest.Create(url), FtpWebRequest) 
    listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails 
    listRequest.Credentials = credentials 
    Dim lines As List(Of String) = New List(Of String) 
    Dim listResponse As FtpWebResponse = CType(listRequest.GetResponse, FtpWebResponse) 
    Dim listStream As Stream = listResponse.GetResponseStream 
    Dim listReader As StreamReader = New StreamReader(listStream) 

    While Not listReader.EndOfStream 
     lines.Add(listReader.ReadLine) 

    End While 

    For Each line As String In lines 
     Dim tokens As String() = line.Split({" "}, 9, StringSplitOptions.RemoveEmptyEntries) 
     Dim name As String = tokens(8) 
     Dim permissions As String = tokens(0) 
     Dim localFilePath As String = Path.Combine(localPath, name) 
     Dim fileUrl As String = (url + name) 
     If (permissions(0) = ChrW(100)) Then 
      If Not Directory.Exists(localFilePath) Then 
       Directory.CreateDirectory(localFilePath) 
      End If 

      DownloadFtpDirectory((fileUrl + "/"), credentials, localFilePath) 
     Else 
      Dim downloadRequest As FtpWebRequest = CType(WebRequest.Create(fileUrl), FtpWebRequest) 
      downloadRequest.Credentials = credentials 
      downloadRequest.KeepAlive = False 
      downloadRequest.Method = WebRequestMethods.Ftp.DownloadFile 
      downloadRequest.UseBinary = True 
      downloadRequest.Proxy = Nothing 
      downloadRequest.UsePassive = False 

      Dim downloadResponse As FtpWebResponse = CType(downloadRequest.GetResponse, FtpWebResponse) 
      Dim sourceStream As Stream = downloadResponse.GetResponseStream 
      Dim targetStream As FileStream = New FileStream(localFilePath, FileMode.Create) 

      Dim buffer() As Byte = New Byte((10240) - 1) {} 
      Dim read As Integer 

      While (sourceStream.Read(buffer, 0, buffer.Length) > 0) 
       targetStream.Write(buffer, 0, read) 

      End While 

     End If 

    Next 
End Sub 

,我调用该函数从此方法:

Private Sub btnDownloadImagesFromFTP_Click(sender As Object, e As EventArgs) Handles btnDownloadImagesFromFTP.Click 
    Try    
     Dim credentials As NetworkCredential = New NetworkCredential("user", "password") 
     Dim url As String = "ftp://myftp/imagesDirectory/" 
     DownloadFtpDirectory(url, credentials, "C:\Users\Admin\Desktop\imagesFromFTP") 
    Catch ex As Exception 
     MessageBox.Show(ex.Message.ToString) 
    End Try 
End Sub 

的代码工作正常,并与里面的图片文件下载子目录和名字好,但是当我打开任何图像,是空的(0字节)

任何人都知道为什么会发生这种情况?谢谢。

回答

1

您从不指定read变量。

While ((read = sourceStream.Read(buffer, 0, buffer.Length)) > 0)