2011-03-17 89 views
0

這是我的痛苦問題。我從一個FTP(一個開發站點)轉移到另一個FTP(一個測試站點)。給我留下改變這個過程的想法。這是我的手。在任何情況下,這裏是我的方法:FTPWebRequest:從一個FTP傳輸到另一個FTP,目標文件損壞

Public Function TransferFile(originalFile As String, destinationFile As String) As String 
     Try 
      'FileStream for holding the file 
      Dim uploadRequest As FtpWebRequest = WebRequest.Create(destinationFile) 
      uploadRequest.Method = WebRequestMethods.Ftp.UploadFile 
      uploadRequest.Credentials = New NetworkCredential(ftp_user, ftp_pw) 
      uploadRequest.UseBinary = True 
      uploadRequest.UsePassive = False 

      'connect to the server 
      Dim fileRequest As FtpWebRequest = WebRequest.Create(originalFile) 
      fileRequest.Method = WebRequestMethods.Ftp.DownloadFile 
      fileRequest.Credentials = New NetworkCredential(ftp_user, ftp_pw) 
      fileRequest.UseBinary = True 
      fileRequest.UsePassive = False 

      'get the servers response 
      Dim response As WebResponse = fileRequest.GetResponse() 

      'retrieve the response stream 
      Dim stream As Stream = response.GetResponseStream() 
      CopyStream(stream, uploadRequest.GetRequestStream) 

      stream.Close() 
      response.Close() 

      Return "File transfered" 
     Catch ex As System.Security.SecurityException 
      Return ex.Message 
     Catch ex As Exception 
      Return ex.Message 
     End Try 
    End Function 

    Public Shared Sub CopyStream(input As Stream, output As Stream) 
     Dim buffer As Byte() = New Byte(32767) {} 
     While True 
     Dim read As Integer = input.Read(buffer, 0, buffer.Length) 
     If read <= 0 Then 
      Return 
     End If 
     output.Write(buffer, 0, read) 
     End While 
    End Sub 

這適用於ASPX文件和其後面的.vb代碼。當我們嘗試傳輸.DLL文件時,它們在服務器上顯示爲0字節,有時實際傳輸。問題是,儘管尺寸與原始尺寸相同,但它們的行爲好像是腐敗的。有沒有人有辦法解決嗎?

+0

我只是用你的代碼做了一個測試,它對我來說工作得很好。我區分了兩個DLL,它們是相同的。 – 2011-03-17 18:45:30

回答

0

收出輸出流,並得到響應從uploadRequest工作。

0

只是一個猜測 - 使用BYREF在子定義

公共共享小組CopyStream(BYREF輸入作爲流,BYREF輸出作爲流)

+0

這將允許他將'input'和'output'指向他的方法沒有做的新變量。 – 2011-03-17 21:40:43