FTP-Tutorial

    • VB.NET

    Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Gelöschter Benutzer.

      Hallo,

      da öfters im Internet und Netzwerkprogrammierungs Unterforum nach verschiedenen FTP-Codes gefragt wird habe ich mich entschlossen mal ein Tuturial zuschreiben.



      1. Datei downloaden:

      Es gibt 2 verschiedene arten eine Datei zudownloaden: die "normale" Art und die Asyncrone Art wobei ich die Asyncrone art bevorzuge. Bei der normalen Art Reagiert das Programm nicht mehr wenn man den download nicht mit einem Backgroundworker ausführt bei der Asyncronen art jedoch schon.

      Der Code zum "normalem" Download ist dieser:

      VB.NET-Quellcode

      1. Dim web as New Net.Webclient
      2. web.Credentials = New Net.NetworkCredential ("Benutzername","Passwort")
      3. web.DownloadFile ("Link zur Datei","Speicherort(mit datei endung!)")


      Der Code zum ansyncronen downloaden ist dieser:

      Global Deklarieren:

      VB.NET-Quellcode

      1. Dim WithEvents web as New Net.Webclient


      Eigentlicher Code:

      VB.NET-Quellcode

      1. web.Credentials = New Net.NetworkCredentials ("Benutzername","Passwort")
      2. web.DownloadFileAsync (New Uri ("Link zur datei"),"speicherort mit datei endung")


      Kein großer unterschied beim befehl, wobei man aber beim asyncronen download die Fertigstellung des downloads mit einem Code "auslesen" muss im gegensatz zu dem "normalem" Download bei dem man den Code der nach dem download ausgeführt werden soll einfach hinter den Befehl des downloads schreibt.

      Der Code zum "auslesen" des Zeitpunkts wann der Downloadfertig ist, ist dieser:

      VB.NET-Quellcode

      1. Private Sub web_DownloadFileCompleted(Byval sender as Object, ByVal e As System.Net.DownloadFileCompletedEventArgs) Handles web.DownloadFileCompleted
      2. 'Hier der Code der ausgeführt werden soll wenn der Download fertig ist
      3. End Sub


      _________________________________________________________________________________________________________


      2. Datei Upload:

      Der Code zum Uploaden einer Datei sieht fast genauso aus wie der zum downloaden. Auch hier gibt es eine normale und asyncrone art. Der code zum normalem uloaden ist dieser:

      VB.NET-Quellcode

      1. Dim web as New Net.Webclient
      2. web.Credentials = New Net.NetworkCredential ("Benutzername","Passwort")
      3. web.UploadFile ("Zielverzeichnis auf Server","Speicherort(mit datei endung!)")



      Der Code zum asyncronen upload ist dieser:

      Global Deklarieren:

      VB.NET-Quellcode

      1. Dim web as New Net.Webclient


      Eigentlicher Code:

      VB.NET-Quellcode

      1. web.Credentials = New Net.NetworkCredential ("Benutzername","Passwort")
      2. web.UploadFileAsync (New Uri ("Speicherort auf dem server"),"Aktuelles Verzeichnis auf dem PC")



      Auch hier muss man den abschluss des Uploads abfangen. Dieser Code ist der gleiche wie beim download nur statt download upload:

      VB.NET-Quellcode

      1. Private Sub web_UploadFileCompleted(Byval sender as Object, ByVal e As System.Net.UploadFileCompletedEventArgs) Handles web.UploadFileCompleted
      2. 'Hier der Code der ausgeführt werden soll wenn der Upload fertig ist
      3. End Sub




      _________________________________________________________________________________________________________


      3. String downloaden (.txt datei auslesen):

      Es gibt auch eine einfache methode um einen Text zudownloaden ohne das man die komplette datei erst auf seinem PC braucht. Davon gibt es wieder die beiden möglichkeiten.

      normal:

      VB.NET-Quellcode

      1. Dim web as New Net.Webclient
      2. web.Credentials = New Net.NetworkCredential ("Benutzername","Passwort")
      3. web.DownloadString ("Link zur datei")



      async:

      Global Deklarieren:

      VB.NET-Quellcode

      1. Dim web as new Net.Webclient


      Eigentlicher Code:

      VB.NET-Quellcode

      1. web.Credentials = New Net.NetworkCredential ("Benutzername","Passwort")
      2. web.DownloadStringasync ("Link zur datei")



      Auch bei dieser async-methode muss man das Fertigstellen des Downloads abfangen:

      VB.NET-Quellcode

      1. Private Sub web_DownloadStringCompleted(Byval sender as Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles web.DownloadStringCompleted
      2. 'Hier der Code der ausgeführt werden soll wenn der Upload fertig ist
      3. End Sub



      _________________________________________________________________________________________________________


      4. Ordner auf FTP-Server auslesen:

      Um einen Ordner auszulesen kann man HttpWebReaquest benutzen. Hierbei gibt es zum glück nur eine mölichkeit :thumbsup:


      VB.NET-Quellcode

      1. Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create("Link zum FTP-Ordner")
      2. request.Method = Net.WebRequestMethods.Ftp.ListDirectory
      3. request.Credentials = New Net.NetworkCredential("Benutzername", "Passwort")
      4. Dim response As Net.FtpWebResponse = request.GetResponse()
      5. ListBox1.Items.Clear()
      6. Using myReader As New IO.StreamReader(response.GetResponseStream())
      7. Do While myReader.EndOfStream = False
      8. ListBox1.Items.Add(myReader.ReadLine())
      9. Loop
      10. End Using


      Dieser Code stammt von vcware.de


      _________________________________________________________________________________________________________


      5. Datei umbenennen:

      VB.NET-Quellcode

      1. Dim Request As Net.FtpWebRequest = Net.WebRequest.Create("Link zur datei")
      2. Dim Response As Net.FtpWebResponse
      3. Request.Credentials = New Net.NetworkCredential("Benutzername", "Passwort")
      4. Request.Method = Net.WebRequestMethods.Ftp.Rename
      5. Request.Timeout = (60000)
      6. Request.RenameTo = "Neuer name mit dateiendung"
      7. Response = Request.GetResponse()
      8. Response.Close()




      _________________________________________________________________________________________________________



      6. Dateilöschen:

      Natürlich kann man auch eine datei auf dem server löschen. Das funktioniert auch wieder über Request. Der Code ist dieser:

      VB.NET-Quellcode

      1. Try
      2. Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create("Link zur datei")
      3. request.Method = Net.WebRequestMethods.Ftp.DeleteFile
      4. request.Credentials = New Net.NetworkCredential("Benutzername", "Passwort")
      5. Dim response As Net.FtpWebResponse = request.GetResponse()
      6. Catch ex As Exception
      7. MsgBox(ex.Message)
      8. End Try











      Ich hoffe ich konnte euch ein bischen helfen ;)


      lg,

      viperkill

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „viperkill“ ()

      web.Credentials = New Net.NetworkCredentials ("Benutzername","Passwort")
      web.DownloadFileAsync (New Uri ("Link zur datei"),"speicherort mit datei endung")



      Da wo "speicherort mit dateiendung" steht, kannst du einen beliebigen Pfad angeben wie z.b. "C:\Users\Test\Desktop\Besispiel.jpg"
      Aber denke immer daran, du musst den speicherort mit dem dateityp angeben wie z.b. *.txt oder *.jpg



      Grüße,

      viperkill

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „viperkill“ ()

      Problem bei Upload

      Hi viperkill
      Ich habe jetzt noch ein Problem beim Upload ich habe deinen Code eingefügt die Nutzerdaten eingefügt und wenn ich jetzt versuche eine Datei hochzuladen bekomme ich die Fehlermeldung:

      WebException
      Der angeforderte URI ist für diesen FTP-Befehl ungültig.
      Hallo Leute
      ich habe diese privat sub:

      VB.NET-Quellcode

      1. Visual Basic Quellcode
      2. Private Sub web_DownloadFileCompleted(Byval sender as Object, ByVal e As System.Net.DownloadFileCompletedEventArgs) Handles web.DownloadFileCompleted
      3. 'Hier der Code der ausgeführt werden soll wenn der Download fertig ist
      4. End Sub


      aus dem Tut eingefügt un bei mir kommt dann die fehlermeldung:
      Fehler 1 Der Typ "System.Net.DownloadFileCompletedEventArgs" ist nicht definiert. C:\Users\Ötzi\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 34 78 WindowsApplication1
      Fehler 2 Die Private Sub web_DownloadFileCompleted(sender As Object, e As <nicht erkannter Typ>)-Methode kann das Public Event DownloadFileCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs)-Ereignis nicht behandeln, da die Signaturen inkompatibel sind. C:\Users\Ötzi\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb 34 133 WindowsApplication1

      was mach eich falsch?
      hier mein ganzer code


      VB.NET-Quellcode

      1. Public Class Form1
      2. Dim WithEvents web As New Net.WebClient
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      4. Dim request As Net.FtpWebRequest = Net.FtpWebRequest.Create("adresse")
      5. request.Method = Net.WebRequestMethods.Ftp.ListDirectory
      6. request.Credentials = New Net.NetworkCredential("user", "passwort")
      7. Dim response As Net.FtpWebResponse = request.GetResponse()
      8. ListBox1.Items.Clear()
      9. Using myReader As New IO.StreamReader(response.GetResponseStream())
      10. Do While myReader.EndOfStream = False
      11. If My.Settings.State = False Then
      12. ListBox1.Items.Add(myReader.ReadLine())
      13. Dim web As New Net.WebClient
      14. web.Credentials = New Net.NetworkCredential("user", "passwort")
      15. web.DownloadFileAsync(New Uri("ftp://" & myReader.ReadLine), "e:" & myReader.ReadLine)
      16. My.Settings.State = True
      17. End If
      18. Loop
      19. End Using
      20. End Sub
      21. Private Sub web_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadFileCompletedEventArgs) Handles web.DownloadFileCompleted
      22. 'Hier der Code der ausgeführt werden soll wenn der Download fertig ist
      23. End Sub
      24. End Class


      was muss ichmachen das es in den download complete event läuft?
      ich denke du musst statt

      VB.NET-Quellcode

      1. Private Sub web_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadFileCompletedEventArgs) Handles web.DownloadFileCompleted
      2. 'Hier der Code der ausgeführt werden soll wenn der Download fertig ist
      3. End Sub

      das schreiben:

      VB.NET-Quellcode

      1. Private Sub web_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadDataCompletedEventArgs) Handles web.DownloadFileCompleted
      2. 'Hier der Code der ausgeführt werden soll wenn der Download fertig ist
      3. End Sub

      ;)

      Gruß, Gugi :thumbup:
      Ist zwar schon ein bisschen älter aber ich habe da noch ein Problem:
      Beim Upload kommt der Fehler: Der Remoteserver hat einen Fehler zurückgegeben: 227 Entering Passive Mode (87,106,247,223,4,237)

      Beim Googeln kam raus, dass es daran liegt, das der Net.WebClient die passive mode benutzt.

      Bei meinem Server geht aber nur aktiv. Also wie kann ich das Ganze mit der Aktiv mode machen?

      Mein Code:

      VB.NET-Quellcode

      1. Dim WithEvents web As New Net.WebClient
      2. Public Sub upload(ByVal name As String, ByVal passwort As String)
      3. web.Credentials = New Net.NetworkCredential(name, passwort)
      4. web.UploadFile("ftp://server/datei.xml", TextBox1.Text)
      5. End Sub
      6. Private Sub web_UploadFileCompleted(ByVal sender As Object, ByVal e As System.Net.UploadFileCompletedEventArgs) Handles Web.UploadFileCompleted
      7. MsgBox("Fertig")
      8. End Sub
      Hallo :)
      Also erstmal: Sehr gelungenes Tutorial :D Muss man einfach mal sagen ;)
      Ich will eine Textdatei vom FTP Server runterladen und direkt in einen String konvertieren!
      Das ganze soll async geschehen. Nur irgendwie weis ich nicht wie ich Dein code da jetzt einbinden soll ....
      Kann mir jemand den Code schicken, wie man das macht?
      Wäre Euch echt dankbar :)
      Lg Mr.Bodega