Progress Bar bei Ftp Download

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Messiahs.

    Progress Bar bei Ftp Download

    Hallo liebe Community !

    Ich möchte von einen Ftp Server Daten aus einen Ordner laden und den Fortschritt in einer Progressbar anzeigen lassen.
    Das mit dem Download aus aus dem Ordner funktioniert soweit.
    Leider finde ich keine Möglichkeit die Progressbar anzusprechen.

    Methode eins:
    Hier benutze ich:

    VB.NET-Quellcode

    1. Private WithEvents webclient As New Net.WebClient

    und kann somit die Progressbar ansprechen.
    Das Problem ist jedoch:

    VB.NET-Quellcode

    1. webclient.DownloadFileAsync(New Uri("ftp://85.114.133.120:3021/test/test.rar"), "e:\test\test.rar"))


    Ich kann hier nur eine Datei runterladen, finde keine möglichkeit alle Datein aus einen Verzeichnis zu laden.

    Der ganze Code aus Beispiel 1

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Public Class Form1
    4. Private WithEvents webclient As New Net.WebClient
    5. Private Sub webclient_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles webclient.DownloadProgressChanged
    6. ProgressBar1.Value = e.ProgressPercentage
    7. Label1.Text = e.ProgressPercentage & " % fertig - " & e.BytesReceived & "/" & e.TotalBytesToReceive
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. 'Dim add As String = "ftp://***.114.***.120:***/test/test.rar"
    11. webclient.Credentials = New Net.NetworkCredential("test", "")
    12. webclient.DownloadFileAsync(New Uri("ftp://85.114.133.120:3021/test/test.rar"), "e:\test\test.rar")
    13. End Sub
    14. End Class


    Beispiel 2

    Hier habe ich die möglichkeit geschaffen, das ich alles aus einen Ordner downloaden kann, jedoch weis ich nicht wie ich die progressbar ansprechen kann:

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Public Class Form1
    4. Private WithEvents webclient As New Net.WebClient
    5. Private WithEvents ftp As New call
    6. Private Sub webclient_DownloadProgressChanged(sender As Object, e As Net.DownloadProgressChangedEventArgs) Handles webclient.DownloadProgressChanged
    7. ProgressBar1.Value = e.ProgressPercentage
    8. Label1.Text = e.ProgressPercentage & " % fertig - " & e.BytesReceived & "/" & e.TotalBytesToReceive
    9. End Sub
    10. Private Sub listFTP(URL As String)
    11. Dim requ As FtpWebRequest = Nothing
    12. Dim resp As FtpWebResponse = Nothing
    13. Dim reader As StreamReader = Nothing
    14. Try
    15. requ = CType(WebRequest.Create(URL), FtpWebRequest)
    16. requ.Credentials = New NetworkCredential("wurst", "")
    17. 'Auszuführende Aktion festlegen:
    18. requ.Method = WebRequestMethods.Ftp.ListDirectory
    19. resp = CType(requ.GetResponse(), FtpWebResponse)
    20. reader = New StreamReader(resp.GetResponseStream())
    21. While (reader.Peek + 1)
    22. My.Computer.Network.DownloadFile("ftp://85.***.***.1***:***/test/" & Path.GetFileName(reader.ReadLine), "e:\test\" & Path.GetFileName(reader.ReadLine), "wurst", "")
    23. End While
    24. Finally
    25. If reader IsNot Nothing Then reader.Close()
    26. End Try
    27. End Sub
    28. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
    29. System.EventArgs) Handles Button1.Click
    30. listFTP("ftp://85.114.133.120:3021/test")
    31. End Sub
    32. End Class

    Danke sehr !
    Was ist Dein eigentliches Problem?
    Was funktioniert nicht?
    Gibt es Fehlermeldungen (welche Meldung, welche Zeile)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Messiahs schrieb:

    in einer progressbar
    Pro file eine Progressbar oder pro alle Files eine Progressbar?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    muss man da nich zuerst die kb vom anfang bereichen "0" und dan die kb wiegross die datweie ist? "3500kb"

    und dan die procressbar danach ausrichten? das rechts dan 3500kb ist? und sich dan immer aktuallisiert sobald mehr kb geladen sind?
    sorry hab noch nie mit progressbar gearbeitet daher keine wirkliche idee

    HorrorClown schrieb:

    Eine für den aktuellen Download und die andere für den Gesamtfortschritt
    @Messiahs: Da brauchst Du die Summe der Länge aller downzuloadenden Dateien.
    Nimm zur Ermittlung der Einzellängen diese Funktion:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function FileSize(ByVal fileUri As Uri) As Long
    2. Dim result As Long = 0
    3. Dim FtpReq As WebRequest = Nothing
    4. Select Case fileUri.Scheme
    5. Case Uri.UriSchemeFtp
    6. Try
    7. FtpReq = FtpWebRequest.Create(fileUri)
    8. FtpReq.Method = WebRequestMethods.Ftp.GetFileSize
    9. Dim FtpResponse As WebResponse = FtpReq.GetResponse()
    10. result = FtpResponse.ContentLength
    11. Catch ex As Exception
    12. result = 0
    13. 'MessageBox.Show("Dateigröße konnte nicht gelesen werden !")
    14. End Try
    15. Case Uri.UriSchemeHttp
    16. Try
    17. FtpReq = HttpWebRequest.Create(fileUri)
    18. FtpReq.Method = WebRequestMethods.Http.Head
    19. Dim FtpResponse As WebResponse = FtpReq.GetResponse()
    20. result = FtpResponse.ContentLength
    21. Catch ex As Exception
    22. result = 0
    23. 'MessageBox.Show("Dateigröße konnte nicht gelesen werden !")
    24. End Try
    25. End Select
    26. Return result
    27. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!