FTP Upload (My.Computer.Network.UploadFile) mit Progressbar

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Mono.

    FTP Upload (My.Computer.Network.UploadFile) mit Progressbar

    Hallo zusammen,

    in meiner Software verwende ich den folgenden Code um eine Datei auf einen FTP-Server zu übertragen. Jetzt weiß ich nur nicht, wie ich es hier anstellen kann, dass eine Progressbar den Uploadvorgang anzeigt.

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.NET
    3. Private Sub ButtonX1_Click(sender As Object, e As EventArgs) Handles ButtonX1.Click
    4. Try
    5. Me.Cursor = Cursors.WaitCursor
    6. My.Computer.Network.UploadFile(Application.StartupPath & "\Dateiname.sdf", My.Settings.FTPurl & "Dateiname.dsi", My.Settings.FTPuser, KeyOff(My.Settings.FTPpasswort)) ' KeyOff entschlüsselt nur das Passwort
    7. DesktopAlert.AlertPosition = eAlertPosition.TopRight
    8. DesktopAlert.AlertColor = eDesktopAlertColor.Default
    9. DesktopAlert.AutoCloseTimeOut = 10
    10. DesktopAlert.TextMarkupEnabled = True
    11. DesktopAlert.Show("Das Backup wurde erfolgreich erstellt und auf den FTP-Server übertragen.", My.Resources.Resources.WolkeUp)
    12. Me.Cursor = Cursors.Default
    13. Catch ex As Exception
    14. Me.Cursor = Cursors.Default
    15. ToastNotification.ToastBackColor = Color.SteelBlue
    16. ToastNotification.Show(Me, ex.Message, My.Resources.Fehler, 3000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
    17. End Try
    18. End Sub


    Wie kann ich hier eine Progressbar ansprechen, die den Upload anzeigt?

    Selbes Problem gilt später für den Download:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.NET
    3. Private Sub ButtonX2_Click(sender As Object, e As EventArgs) Handles ButtonX2.Click
    4. Try
    5. Me.Cursor = Cursors.WaitCursor
    6. Dim sDBFile As String = "Dateiname.sdf"
    7. My.Computer.Network.DownloadFile(My.Settings.FTPurl & "Dateiname.dsi", Application.LocalUserAppDataPath & "\Dateiname.sdf", My.Settings.FTPuser, KeyOff(My.Settings.FTPpasswort)) ' KeyOff entschlüsselt nur das Passwort
    8. ' Restore the original file from the compacted file
    9. If File.Exists(Application.LocalUserAppDataPath & "\Dateiname.sdf") Then
    10. File.Copy(Application.LocalUserAppDataPath & "\Dateiname.sdf", sDBFile, True)
    11. Form1.ListBox1.Items.Clear()
    12. ReadData() ' Einlesen der Datenbank
    13. Form1.ListBox1.SelectedIndex = 0
    14. Form1.GroupBox1.Text = Form1.ListBox1.Items.Count & " Einträge"
    15. File.Delete(Application.LocalUserAppDataPath & "\Dateiname.sdf")
    16. DesktopAlert.AlertPosition = eAlertPosition.TopRight
    17. DesktopAlert.AlertColor = eDesktopAlertColor.Green
    18. DesktopAlert.AutoCloseTimeOut = 10
    19. DesktopAlert.TextMarkupEnabled = True
    20. DesktopAlert.Show("Die Rücksicherung der Datenbank wurde erfolgreich durchgeführt.", My.Resources.Resources.WolkeDown)
    21. End If
    22. Me.Cursor = Cursors.Default
    23. Catch ex As Exception
    24. Me.Cursor = Cursors.Default
    25. ToastNotification.ToastBackColor = Color.SteelBlue
    26. ToastNotification.Show(Me, ex.Message, My.Resources.Fehler, 3000, eToastGlowColor.Red, eToastPosition.MiddleCenter)
    27. End Try
    28. End Sub


    Beide Codes funktionieren einwandfrei, nur eben ohne Progressbar. Für Hilfe wäre ich sehr dankbar.

    LG, so27
    Das Ganze geht sehr wahrscheinlich nicht über My.NetWork.UploadFile. (Ich kenn die Methode nicht, da ich prinzipiell nie den My Namespace verwende oder verwendet habe).
    Aber die Methode hat auch einen Parameter der heißt showUI welcher default auf false steht. Vll reicht dir ja das schon auf true zu setzen.

    Funktionieren würde es sonst zB mit einem FtpWebRequest und mit einem Stream in dem du mit einem gewissen Buffer schreibst.

    pseudo code:

    VB.NET-Quellcode

    1. Dim ftpReq as FtpWebRequest = ..
    2. Dim fs as FileStream = File.GetStream
    3. Dim fptsream as Stream = ftpReq.GetRequestStream
    4. dim len as integer = fs.Length
    5. Report Progressbar Maximum
    6. dim buffer as Byte = new Byte(4096) 'größe hier im Grunde variabel
    7. dim readBytes as long = 0
    8. dim read as int
    9. do while fs.hassomething to read
    10. read = fs.read(buffer,0,buffer.length)
    11. ftpstream.write(buffer, 0 , read)
    12. readBytes = readBytes + read
    13. report progress (readBytes) to progress bar
    14. loop


    Ich habe dir nicht alles genau vorgekaut, aber ich denke du solltest die Idee verstehen.


    Am Ende möchte ich dich darauf hinweisen, dass ich FTP nur noch im Intranet verwenden würde oder die Daten für jedermann frei zur verfügung stehen dürfen.
    Das Protokoll ist hinsichtlich Sicherheit und Performance komplett veraltet.
    Du hast den Warnhinweis hiermit erhalten.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!

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