Zip Archive Downloaden und Entpacken / Status

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zip Archive Downloaden und Entpacken / Status

    Hi, hab hier zwar schon bsl. was gefunden aber nix wirklich was funktionert.

    Wenn man auf einem Button drückt, lädt er das Archive runter.
    Es steht dann direkt Download Fertig und kurze Zeit Später ist der Download Balken voll.

    Hätte es aber gerne das der Balken voll wird und dann erst angezeigt wird, wenn es fertig ist.

    VB.NET-Quellcode

    1. Private Sub Down_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Down.Click
    2. AddHandler _webClient.DownloadProgressChanged, AddressOf DownloadProgress
    3. _webClient.DownloadFileAsync(New System.Uri("http://xxxxxxx/a.zip"), My.Application.Info.DirectoryPath & "\a.zip")
    4. MsgBox("Download Fertig.")
    5. End Sub

    VB.NET-Quellcode

    1. Private Sub ProgressBar1_Click(sender As Object, e As EventArgs) Handles ProgressBar1.Click
    2. End Sub


    VB.NET-Quellcode

    1. Private Sub DownloadProgress(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
    2. Me.ProgressBar1.Value = e.ProgressPercentage
    3. End Sub
    4. Private Sub MyWebClient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles MyWebClient.DownloadProgressChanged
    5. ProgressBar1.Value = e.ProgressPercentage
    6. Dim totalbytes As Long = e.TotalBytesToReceive / 1024
    7. Dim bytes As Long = e.BytesReceived / 1024
    8. ToString()
    9. Label1.Text = bytes.ToString & " kb von " & totalbytes.ToString & " kb"
    10. If ProgressBar1.Value = 100 Then
    11. Label1.Text = ("Fertig")
    12. MsgBox("Dein Download war Erfolgreich!")
    13. End If
    14. End Sub


    Alternative währe es schön wenn er es direkt nach dem Download entpackt :)

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    marcel87 schrieb:

    Es steht dann direkt Download Fertig
    Da steht "Download fertig", weil du es dann entsprechend auch anzeigst... Siehe Zeile 6 von deinem Snippet. Einfach entfernen

    Zum Entpacken guck dir die Methode ZipFile.ExtractToDirectory an.

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

    Nein ist keine absicht, war von was anderem ^^

    Also habe es jetzt so.

    VB.NET-Quellcode

    1. Friend WithEvents MyWebClient As New Net.WebClient
    2. Dim client As New Net.WebClient
    3. Private progress_download As Object
    4. Private lbl_Info As Object
    5. Private a As Object
    6. Public Property Timer1 As Object
    7. Private _webClient As WebClient
    8. Public Sub New()
    9. InitializeComponent()
    10. _webClient = New WebClient()
    11. End Sub
    12. Private Sub Down_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Down.Click
    13. AddHandler _webClient.DownloadProgressChanged, AddressOf DownloadProgress
    14. _webClient.DownloadFileAsync(New System.Uri("http://xxxxxxxxxx/a.zip"), My.Application.Info.DirectoryPath & "\a.zip")
    15. If ProgressBar1.Value = 100 Then
    16. MsgBox("Download Fertig. Begine mit entpacken")
    17. AddHandler client.DownloadProgressChanged, AddressOf DownloadProgress
    18. Else
    19. Dim unZipDir As DirectoryInfo = New DirectoryInfo("entpackt")
    20. If Not unZipDir.Exists Then
    21. unZipDir.Create()
    22. End If
    23. Dim zipPath As String = ".\a.zip"
    24. Dim extractPath As String = ".\entpackt"
    25. ZipFile.ExtractToDirectory(zipPath, extractPath)
    26. File.Delete(a.zip)
    27. End If
    28. End Sub
    29. Private Sub DownloadProgress(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)
    30. Me.ProgressBar1.Value = e.ProgressPercentage
    31. End Sub
    32. Private Sub MyWebClient_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles MyWebClient.DownloadProgressChanged
    33. ProgressBar1.Value = e.ProgressPercentage
    34. Dim totalbytes As Long = e.TotalBytesToReceive / 1024
    35. Dim bytes As Long = e.BytesReceived / 1024
    36. ToString()
    37. Label1.Text = bytes.ToString & " kb von " & totalbytes.ToString & " kb"
    38. If ProgressBar1.Value = 100 Then
    39. Label1.Text = ("Fertig")
    40. MsgBox("Dein Download war Erfolgreich!")
    41. End If
    42. End Sub


    Wenn ich in Virtual Studio aud Starten drücke, öffnet er das Programm ohne Probleme.

    Wenn ich auf Download drücke lädt er die Datei und der Balken läuft durch.
    Dann bricht aber das debugen ab und er zeigt den Fehler an.

    Quellcode

    1. System.NotImplementedException
    2. HResult=0x80004001
    3. Nachricht = Die Methode oder der Vorgang ist nicht implementiert.
    4. Quelle = Test
    5. Stapelüberwachung:
    6. bei Test.Form1.Down_Click(Object sender, EventArgs e) in C:\xxxxxx\xxxxxxx\Form1.vb: Zeile62
    7. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    8. bei System.Windows.Forms.Button.OnClick(EventArgs e)
    9. bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    10. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    11. bei System.Windows.Forms.Control.WndProc(Message& m)
    12. bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    13. bei System.Windows.Forms.Button.WndProc(Message& m)
    14. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    15. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    16. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    17. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    18. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    19. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    20. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    21. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    22. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    23. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    24. bei Test.My.MyApplication.Main(String[] Args) in : Zeile83


    Zeile 62 :
    End Sub

    Zeile83
    ist leer


    ps: Zur Info, ist das erste mal das ich mich damit beschäftige ^^

    marcel87 schrieb:

    Dann bricht aber das debugen ab und er zeigt den Fehler an.
    Es wäre natürlich gut, wenn Du uns mitteilen würdest, in welcher Zeile Deines Codes diese Exception auftritt. 8o
    Wir empfehlen: Option Strict On.
    Visual Studio – Empfohlene Einstellungen
    Integer-Division funktioniert in VB so:

    VB.NET-Quellcode

    1. Dim totalbytes As Long = e.TotalBytesToReceive \ 1024
    Schmeiße allen redundanten Code raus: 3 (drei) Variablen vom Type WebClient usw.
    Nutze das DownloadFileCompleted-Event zum Start des Entpackens:

    VB.NET-Quellcode

    1. Private Sub MyWebClient_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles MyWebClient.DownloadFileCompleted
    2. MessageBox.Show("Dein Download war Erfolgreich!")
    3. Label1.Text = "Fertig"
    4. Call EntpackeMeineZip() ' diese Sub ist Teil Deinere Sub Down_Click()
    5. End Sub
    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!