2012-02-23 4 views
0

Я пишу pgm, используя vb.net, чтобы получить файл с reomte machine & хранить его на локальной машине с помощью FTP. но я всегда получаю сообщение об ошибке, как «удаленной машине возвратил ошибку: (550) файл ип имеющийся (например, файл не найден, нет доступа)Передача файла ftp с использованием vb.net

помочь мне исправить код

Dim reqFTP As FtpWebRequest 
    Dim filepath As String 
    Dim filename As String 
    Dim filename1 As String 
    Dim ftpserverip As String 
    Dim ftpuserid As String 
    Dim ftpPassword As String 
    Try 
     filename1 = TxtRemoteFile.Text 
     filepath = TxtLocalFile.Text 
     filename = Locfname.Text 
     ftpserverip = TxtServerIP.Text 
     ftpuserid = TxtUserName.Text 
     ftpPassword = TxtPwd.Text 
     Dim outputStream As FileStream = New FileStream((filepath + ("\\" + filename)), FileMode.Create) 
     reqFTP = CType(FtpWebRequest.Create(New Uri(("ftp://" _ 
          + (ftpserverip + ("/" + filename1))))), FtpWebRequest) 
     reqFTP.Method = WebRequestMethods.Ftp.DownloadFile 
     reqFTP.UseBinary = True 
     reqFTP.Credentials = New NetworkCredential(ftpuserid, ftpPassword) 
     Dim response As FtpWebResponse = CType(reqFTP.GetResponse, FtpWebResponse) 

     outputStream.Close() 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try  

ответ

0

Вы уверены, ваш FTP информация верна?

0

550 ошибка подключения. Убедитесь, что ваши учетные данные являются точными, и вы не имеете брандмауэр блокирует соединение, а также убедитесь, что сервер принимает ваш IP.

Проверьте мой FTP класс : Его довольно прямолинейно.

Взгляните на мой класс FTP, это может быть именно то, что вам нужно.

Public Class FTP 
     '-------------------------[BroCode]-------------------------- 
     '----------------------------FTP----------------------------- 
     Private _credentials As System.Net.NetworkCredential 
     Sub New(ByVal _FTPUser As String, ByVal _FTPPass As String) 
      setCredentials(_FTPUser, _FTPPass) 
     End Sub 
     Public Sub UploadFile(ByVal _FileName As String, ByVal _UploadPath As String) 
      Dim _FileInfo As New System.IO.FileInfo(_FileName) 
      Dim _FtpWebRequest As System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(New Uri(_UploadPath)), System.Net.FtpWebRequest) 
      _FtpWebRequest.Credentials = _credentials 
      _FtpWebRequest.KeepAlive = False 
      _FtpWebRequest.Timeout = 20000 
      _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile 
      _FtpWebRequest.UseBinary = True 
      _FtpWebRequest.ContentLength = _FileInfo.Length 
      Dim buffLength As Integer = 2048 
      Dim buff(buffLength - 1) As Byte 
      Dim _FileStream As System.IO.FileStream = _FileInfo.OpenRead() 
      Try 
       Dim _Stream As System.IO.Stream = _FtpWebRequest.GetRequestStream() 
       Dim contentLen As Integer = _FileStream.Read(buff, 0, buffLength) 
       Do While contentLen <> 0 
        _Stream.Write(buff, 0, contentLen) 
        contentLen = _FileStream.Read(buff, 0, buffLength) 
       Loop 
       _Stream.Close() 
       _Stream.Dispose() 
       _FileStream.Close() 
       _FileStream.Dispose() 
      Catch ex As Exception 
       MessageBox.Show(ex.Message, "Upload Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 
     End Sub 
     Public Sub DownloadFile(ByVal _FileName As String, ByVal _ftpDownloadPath As String) 
      Try 
       Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpDownloadPath) 
       _request.KeepAlive = False 
       _request.Method = System.Net.WebRequestMethods.Ftp.DownloadFile 
       _request.Credentials = _credentials 
       Dim _response As System.Net.FtpWebResponse = _request.GetResponse() 
       Dim responseStream As System.IO.Stream = _response.GetResponseStream() 
       Dim fs As New System.IO.FileStream(_FileName, System.IO.FileMode.Create) 
       responseStream.CopyTo(fs) 
       responseStream.Close() 
       _response.Close() 
      Catch ex As Exception 
       MessageBox.Show(ex.Message, "Download Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 
     End Sub 
     Public Function GetDirectory(ByVal _ftpPath As String) As List(Of String) 
      Dim ret As New List(Of String) 
      Try 
       Dim _request As System.Net.FtpWebRequest = System.Net.WebRequest.Create(_ftpPath) 
       _request.KeepAlive = False 
       _request.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails 
       _request.Credentials = _credentials 
       Dim _response As System.Net.FtpWebResponse = _request.GetResponse() 
       Dim responseStream As System.IO.Stream = _response.GetResponseStream() 
       Dim _reader As System.IO.StreamReader = New System.IO.StreamReader(responseStream) 
       Dim FileData As String = _reader.ReadToEnd 
       Dim Lines() As String = FileData.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries) 
       For Each l As String In Lines 
        ret.Add(l) 
       Next 
       _reader.Close() 
       _response.Close() 
      Catch ex As Exception 
       MessageBox.Show(ex.Message, "Directory Fetch Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 
      Return ret 
     End Function 

     Private Sub setCredentials(ByVal _FTPUser As String, ByVal _FTPPass As String) 
      _credentials = New System.Net.NetworkCredential(_FTPUser, _FTPPass) 
     End Sub 
    End Class 

Для инициализации:

Dim ftp As New FORM.FTP("username", "password") 

ftp.UploadFile("c:\file.jpeg", "ftp://domain/file.jpeg") 

ftp.DownloadFile("c:\file.jpeg", "ftp://ftp://domain/file.jpeg") 

Dim directory As List(Of String) = ftp.GetDirectory("ftp://ftp.domain.net/") 
     ListBox1.Items.Clear() 
     For Each item As String In directory 
      ListBox1.Items.Add(item) 
     Next 
Смежные вопросы