2011-03-17 43 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