Datei Download

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Croasider.

    Datei Download

    Hallo @ all

    Ich habe diesen Code in einem BackgroundWorker:

    VB.NET-Quellcode

    1. Cookies = My.Settings.Cookies
    2. Dim HttpClient As New Net.WebClient
    3. For il = 0 To DWL_Link.Count - 1
    4. HttpClient.DownloadFileAsync(New Uri(DWL_Link(il)), My.Settings.Ordner & "\" & Artist(il) & " - " & Track(il) & ".mp3")
    5. Do
    6. Loop While HttpClient.IsBusy
    7. Dim Request As HttpWebRequest = CType(WebRequest.Create(DWL_Löschen(il)), HttpWebRequest)
    8. Request.CookieContainer = Cookies
    9. Dim Response As HttpWebResponse = Request.GetResponse()
    10. Dim DataStream As Stream = Response.GetResponseStream()
    11. Dim reader As New StreamReader(DataStream)
    12. Dim Quelltext_Downloads As String = reader.ReadToEnd()
    13. reader.Close()
    14. DataStream.Close()
    15. Response.Close()
    16. Next

    DWL_Link, DWL_Löschen, Track und Artist sind alles ListOf (String).

    Er erstellt zwar eine Datei beim download diese ist dann aber 0 kb groß. Ein Laufzeitfehler oder ein Compilerfehler tritt nicht auf. Was ist falsch an dem Code? Bin für jede Hilfe dankbar :)

    Viele Grüße
    Croasider

    Croasider schrieb:

    Er erstellt zwar eine Datei beim download diese ist dann aber 0 kb groß. Ein Laufzeitfehler oder ein Compilerfehler tritt nicht auf.

    Dann wird ziemlich sicher Deine URL nicht stimmen, da er in diesem Fall zwar eine (leere) Datei anlegt sie aber nicht füllen kann. Ein Trace.Writeline Statement sollte Dir zeigen was er da gerade versucht zu laden.

    Croasider schrieb:

    Was ist falsch an dem Code?

    Grundsätzlich nichts, aber warum verwendest Du DownloadFileAsync , wenn Du es doch künstlich durch die While-Schleife synchron hältst ? Da wäre doch DownloadFile genauso gut - oder ? Und wozu der BGW ?
    Den BackgroundWorker benutze ich, weil ich den DownloadStatus in einer Progressbar anzeigen lassen will und wenn ich über Me.load oder so den Download laufen lassen würde die ProgressBar nicht ganz gezeichnet wird. Der URL ist richtig. Kann ihn so im Browser eintippen und die Datei laden. SChon ein bischen komisch...
    Dann nimm das Me.Shown Event^^

    Oder du deklarierst den WebClient mit Events und wählst das ProgressChanged Event...alles geht...
    Sollte dann etwa so aussehen:

    VB.NET-Quellcode

    1. Dim WithEvents wc As New Net.WebClient
    2. Private Sub wc_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
    3. Me.ProgressBar1.Value = e.ProgressPercentage
    4. End Sub


    Das rufste dann so auf: wc.DownloadFileAsync(URL, Pfad]
    und fertig...keine BGW...nur ein DownloadFileAsync^^
    Wenns dann nicht geht....vllt. noch ein

    VB.NET-Quellcode

    1. Control.CheckForIllegalThreadCrossCalls = False


    Hoffe ich konnte helfen...habe das jetzt nicht getestet...
    Habs jetzt geschafft. Habe anstatt DownloadFileAsync eifach DownloadFile genommen.

    Habe ein Problem habe ich noch. Mein BackgroundWorker zeigt mir obwohl ich diesen Code habe keinen Vortschritt an:

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. Download()
    3. End Sub
    4. Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    5. ProgressBar1.Value = e.ProgressPercentage
    6. End Sub


    Oben ist ja schon die Download Funktion... Die Einstellung ReportProgress ist auf True gesetzt.