Download Programm downloadet keine Daten über 1GB Dateigröße

  • VB.NET

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

    Download Programm downloadet keine Daten über 1GB Dateigröße

    Guten Abend,

    ich habe ein Programm geschrieben was eine Winrar Datei von einem Webserver runterladen soll. Dieses Programm zeigt den Fortschritt des Downloads in Form einer Progressbar, Downloadgeschwindigkeit und die verbleibende Größe des Downloads (z.B. 4354/100756kb).

    Mein Quellcode:

    Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Public Class Form2
    4. Dim WithEvents worker As New System.ComponentModel.BackgroundWorker
    5. Dim timer As Stopwatch 'Stoppuhr zur bestimmung der Downloadgeschwindigkeit
    6. Dim loaded As Long 'Anzahl na Bytes die in einer Zeiteinheit geladen wurden
    7. Dim speed As Double 'Downloadgeschwindigkeit in KB/s
    8. Dim url As String 'Die URL mit der zu ladenden Datei
    9. Dim des As String 'Zielpfad auf dem lokalen System
    10. Dim buffer(327680) As Byte 'Puffer für den Download -> Je größer desto schneller der Download
    11. Dim totBytes As Long = 0 'Größe der zu ladenden Datei
    12. Dim curBytes As Long = 0 'Bisher geladene Bytes
    13. Dim readBytes As Long 'Anzehl gelesener Bytes pro Block
    14. Dim bis As Stream 'Der Strom mit der zu ladenden Datei
    15. Dim fos As FileStream 'Strom der die Datei lokal speichert
    16. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    17. MaximizeBox = False
    18. Me.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink
    19. End Sub
    20. Public Sub doWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles worker.DoWork
    21. timer = New Stopwatch
    22. 'Stream zur Datei im Internet erstellen und Lokal
    23. Dim request As HttpWebRequest = HttpWebRequest.Create(url)
    24. '###################
    25. 'Download fortsetzen falls curBytes > 0
    26. request.Proxy = Nothing
    27. request.AddRange(CInt(curBytes))
    28. Dim response As HttpWebResponse = request.GetResponse
    29. If Not response.StatusCode = HttpStatusCode.PartialContent Then
    30. 'falls der Server wiederaufnahme nicht unterstützt bei 0 anfangen
    31. curBytes = 0
    32. End If
    33. '###################
    34. bis = response.GetResponseStream
    35. If curBytes > 0 Then
    36. fos = New FileStream(des, FileMode.Append, FileAccess.Write)
    37. totBytes = response.ContentLength + curBytes
    38. Else
    39. fos = New FileStream(des, FileMode.Create, FileAccess.Write)
    40. totBytes = response.ContentLength
    41. End If
    42. timer.Start() 'Mit dem Timer wird gemessen, wieviele Bytes in der letzten Sekunde heruntergeladen wurden
    43. While (True)
    44. readBytes = bis.Read(buffer, 0, buffer.Length) 'Aus dem Download Stream lesen
    45. If readBytes = 0 Then
    46. MessageBox.Show("*Text das DOwnload abgeschlossen ist*", "Download erfolgreich")
    47. Exit While 'Download ist abgeschlossen
    48. End If
    49. fos.Write(buffer, 0, readBytes) 'Geladene Bytes lokal Speichern
    50. curBytes += readBytes 'Anzahl gesammt gelesener Bytes erhöhen
    51. loaded += readBytes 'Anzahl der Bytes erhöhen die in der Letzten Sekunde geladen wurden
    52. If timer.ElapsedMilliseconds >= 1000 Then 'Wenn eine Sekunde vergangen ist
    53. speed = 0
    54. speed = FormatNumber(loaded / 1024, 2) 'Geschwindigkeit berechnen
    55. loaded = 0 'und zähler zurücksetzen
    56. timer.Reset() 'den Timer neustarten
    57. timer.Start()
    58. End If
    59. 'Die Anzeige im Formular-Thread aktualisieren
    60. Label1.Invoke(New refreshGUIDel(AddressOf refreshGUI), New Object() {})
    61. End While
    62. 'Ressourcen Freigeben
    63. timer.Stop()
    64. fos.Close()
    65. bis.Close()
    66. End Sub
    67. Private Sub workerDisposing(ByVal sender As Object, ByVal e As System.EventArgs) Handles worker.Disposed
    68. 'Die Streams schließen, da sonst die temporäre Datei nicht gelöscht werden kann!
    69. fos.Close()
    70. bis.Close()
    71. End Sub
    72. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    73. Dim antwort As String
    74. Dim webseite As String = "*Url zum File*"
    75. antwort = MessageBox.Show("*Einleitungstext*", "*Überschrift*", MessageBoxButtons.YesNo, MessageBoxIcon.Information)
    76. If antwort = 6 Then
    77. url = webseite
    78. Button1.Enabled = False
    79. Dim fsd As New SaveFileDialog
    80. fsd.FileName = "*Dateiname*"
    81. des = fsd.FileName
    82. '################
    83. If IO.File.Exists(fsd.FileName) Then
    84. 'Wenn datei exestiert fragen ob diese zum Fortsetzen gewählt werden soll
    85. Dim f As String = MessageBox.Show("*Text*", "*Download forsetzen*", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    86. If f = vbYes Then
    87. 'gelesene Bytes aktualisisren um dort den download zu starten
    88. curBytes = IO.File.ReadAllBytes(fsd.FileName).Length
    89. totBytes = curBytes
    90. End If
    91. End If
    92. '################
    93. worker.WorkerSupportsCancellation = True
    94. worker.RunWorkerAsync()
    95. Else
    96. End If
    97. End Sub
    98. Private Delegate Function refreshGUIDel()
    99. Private Function refreshGUI()
    100. 'Die Fortschrittsanzeige aktualisieren
    101. Me.ProgressBar1.Maximum = totBytes
    102. Me.ProgressBar1.Value = curBytes
    103. Me.Label1.Text = FormatNumber(curBytes / 1024, 0) & "KB / " & FormatNumber(totBytes / 1024, 0) & "KB" & vbNewLine & "Geschwindigkeit: " & speed & " KB/s"
    104. Return Nothing
    105. End Function
    106. Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    107. 'Wenn das Formular geschlossen wird während der Download noch läuft, diesen erst beenden und Ressourcen freigeben
    108. If worker.IsBusy Then
    109. worker.CancelAsync()
    110. worker.Dispose()
    111. '###############
    112. 'Fragen ob Temoporäre Datei gelöscht werden soll
    113. If MessageBox.Show("*Text*", "*Text*", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
    114. File.Delete(des)
    115. End If
    116. '###############
    117. End If
    118. End Sub
    119. End Class


    Das Problem welches ich habe ist, das mein Programm keine Dateien über 1GB Größe downloadet. Sobald die Datei größer ist als 1GB downloadet er die Datei nicht mehr (Geschwindigkeit bleibt ausgeblendet, Fortschrittbalken bleibt leer, usw.). Meine Datei die ich aber zum Download anbieten möchte ist eine 15GB große Winrar Datei.

    Hab ich vielleicht irgendetwas übersehen?

    WG: Deinem Download Problem !

    Hi Nic,
    also ich schätze mal,
    das es hierdran liegt:

    VB.NET-Quellcode

    1. Me.Label1.Text = FormatNumber(curBytes / 1024, 0) & "KB / " & FormatNumber(totBytes / 1024, 0) & "KB" & vbNewLine & "Geschwindigkeit: " & speed & " KB/s"


    Änder diese bitte in:

    VB.NET-Quellcode

    1. Me.Label1.Text = FormatNumber(curBytes / 4098, 0) & "KB / " & FormatNumber(totBytes / 4098, 0) & "KB" & vbNewLine & "Geschwindigkeit: " & speed & " KB/s"


    Eigentlich sollte es klappen. Da ich mich aber selbst mit sowas noch nicht Beschäftigt habe, bin ich mir nicht sicher.

    MFG :thumbsup:
    Bleibt das Download selbst stecken / bricht es ab, die Datei ist nicht da / nur 1GB der Datei sind da
    oder
    bleibt die Anzeige stehen und die Datei ist vollständig da?
    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!
    Ich klicke auf den Button und bekomme dann das Bild was ich oben gepostet habe. So bleibt der auch die ganze Zeit. Wenn ich nachschaue ob eine Datei vorhanden ist dann sehe ich die Datei lokal bei mir, sie hat aber nur 2KB nach 10 Minuten hat sie 20KB...

    /edit Ich hoffe mir kann jemand schnell helfen da es morgen schon zu spät ist =/

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

    Setze zunächst Option Strict On und beseitige alle Fehler.

    VB.NET-Quellcode

    1. Me.ProgressBar1.Maximum = totBytes
    2. Me.ProgressBar1.Value = curBytes
    Me.ProgressBar1.Maximum und Me.ProgressBar1.Value sind Integer
    totBytes und curBytes sind long. Wenn die Datei also länger als 2.147.483.647 Bytes (2GB) ist, knallt diese Zuweisung.
    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!
    Okay ich verstehe was du mir sagen willst. Ich hoffe jetzt nicht das ich geschlagen werde, aber was meinst du mit Option Strict On und wie verbesser ich am besten die Zeilen:

    Quellcode

    1. Me.ProgressBar1.Maximum = totBytes
    2. Me.ProgressBar1.Value = curBytes
    Sobald ich dies auf On setze bekomme ich über 22 Fehler:

    Quellcode

    1. Fehler 1 "Option Strict On" lässt keine impliziten Konvertierungen von System.Net.WebRequest in System.Net.HttpWebRequest zu. *zensierter Pfad zum Projekt*\Form2.vb 32 41 *Programmname*
    2. Fehler 2 "Option Strict On" lässt keine impliziten Konvertierungen von System.Net.WebResponse in System.Net.HttpWebResponse zu. *zensierter Pfad zum Projekt*\Form2.vb 39 43 *Programmname*
    3. Fehler 3 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form2.vb 64 34 *Programmname*
    4. Fehler 4 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu. *zensierter Pfad zum Projekt*\Form2.vb 71 25 *Programmname*
    5. Fehler 5 "Option Strict On" lässt keine impliziten Konvertierungen von System.Windows.Forms.DialogResult in String zu. *zensierter Pfad zum Projekt*\Form2.vb 98 19 *Programmname*
    6. Fehler 6 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu. *zensierter Pfad zum Projekt*\Form2.vb 99 12 *Programmname*
    7. Fehler 7 "Option Strict On" lässt keine impliziten Konvertierungen von System.Windows.Forms.DialogResult in String zu. *zensierter Pfad zum Projekt*\Form2.vb 114 35 *Programmname*
    8. Fehler 8 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu. *zensierter Pfad zum Projekt*\Form2.vb 115 20 *Programmname*
    9. Fehler 9 "Option Strict On" erfordert, dass alle Funktions-, Eigenschafts- und Operatordeklarationen eine As-Klausel enthalten. *zensierter Pfad zum Projekt*\Form2.vb 133 31 *Programmname*
    10. Fehler 10 "Option Strict On" erfordert, dass alle Funktions-, Eigenschafts- und Operatordeklarationen eine As-Klausel enthalten. *zensierter Pfad zum Projekt*\Form2.vb 135 22 *Programmname*
    11. Fehler 11 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form2.vb 137 35 *Programmname*
    12. Fehler 12 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form2.vb 138 33 *Programmname*
    13. Fehler 13 "Option Strict On" lässt keine impliziten Konvertierungen von System.Net.WebRequest in System.Net.HttpWebRequest zu. *zensierter Pfad zum Projekt*\Form3.vb 29 41 *Programmname*
    14. Fehler 14 "Option Strict On" lässt keine impliziten Konvertierungen von System.Net.WebResponse in System.Net.HttpWebResponse zu. *zensierter Pfad zum Projekt*\Form3.vb 30 43 *Programmname*
    15. Fehler 15 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form3.vb 45 34 *Programmname*
    16. Fehler 16 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu. *zensierter Pfad zum Projekt*\Form3.vb 52 25 *Programmname*
    17. Fehler 17 "Option Strict On" lässt keine impliziten Konvertierungen von System.Windows.Forms.DialogResult in String zu. *zensierter Pfad zum Projekt*\Form3.vb 78 19 *Programmname*
    18. Fehler 18 "Option Strict On" lässt keine impliziten Konvertierungen von String in Double zu. *zensierter Pfad zum Projekt*\Form3.vb 79 12 *Programmname*
    19. Fehler 19 "Option Strict On" erfordert, dass alle Funktions-, Eigenschafts- und Operatordeklarationen eine As-Klausel enthalten. *zensierter Pfad zum Projekt*\Form3.vb 95 31 *Programmname*
    20. Fehler 20 "Option Strict On" erfordert, dass alle Funktions-, Eigenschafts- und Operatordeklarationen eine As-Klausel enthalten. *zensierter Pfad zum Projekt*\Form3.vb 97 22 *Programmname*
    21. Fehler 21 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form3.vb 99 35 *Programmname*
    22. Fehler 22 "Option Strict On" lässt keine impliziten Konvertierungen von Long in Integer zu. *zensierter Pfad zum Projekt*\Form3.vb 100 33 *Programmname*
    und die sollst du ausbessern.

    ist hier im forum meiner meinung nach zu oft diskutiert worden.

    einfach googlen nach vb option strict on, und einfach datentypen, welche du kenvertieren willst

    da kommt wirklich genug um die fehler in 10 minuten auszubessern

    zu deinem eigentlichem problem weiß ich leider keinen rat,
    da ich selbst nur sehr kleine programme über

    My.Computer.Network.DownloadFile

    runterladen


    mfg HeadShotHarp

    PS: welche datei willst du zum download anbieten, die 15gb groß ist und dessen copyrightrechte du besitzt^^
    Es wäre nett von Dir, wenn Du noch schriebest, was das Problem war. :thumbup:
    Da liefert die Suchfunktion beim nächsten Mal eine fertige Lösung und keine Luftblase.
    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!