0

これが私の苦痛な問題です。ある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バイトとして表示され、実際に転送されることもあります。問題は、元のサイズと同じサイズであるにもかかわらず、破損しているかのように動作することです。誰かが解決策を持っていますか?

4

2 に答える 2

0

出力ストリームを閉じて、uploadRequestからの応答を取得することは機能しました。

于 2011-03-18T17:49:26.320 に答える
0

推測です-サブ定義でBYREFを使用してください

Public Shared Sub CopyStream(BYREF入力をストリームとして、BYREF出力をストリームとして)

于 2011-03-17T21:26:52.303 に答える