Het rekenkundige bewerking heeft geresulteerd op een overloop fileddownloader

Status
Niet open voor verdere reacties.

hanonymouss

Gebruiker
Lid geworden
7 sep 2011
Berichten
283
Hallo allemaal,

Ik was bezig met het maken van een file downloader, toen ik hem uitteste stopte het programma en krijg de foutmelding:
Code:
Het rekenkundige bewerking heeft geresulteerd op een overloop

Het bestand die ik aan het downloader was ongeveer 204 MB

Ik heb het geprobeerd bij een bestand van MAX 25 MB en dat download het programma wel. misschien komt dat omdat het bestand te groot is, ik weet het niet.

Hier is de volledige code:

[CPP]Imports System.Net

Public Class utpatch
Dim whereToSave As String

Delegate Sub ChangeTextsSafe(ByVal length As Long, ByVal position As Integer, ByVal percent As Integer, ByVal speed As Double)
Delegate Sub DownloadCompleteSafe(ByVal cancelled As Boolean)
Private Sub utpatch_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = ("http://dl.dropbox.com/u/38016137/Software%20downloads/UT2004MegaPack.exe")
Me.Label4.Text = ""
End Sub

Public Sub DownloadComplete(ByVal cancelled As Boolean)
TextBox1.Enabled = True
Button1.Enabled = True
Button2.Enabled = False

If cancelled Then

Me.Label4.Text = "Geannuleerd"





Else
Timer1.Stop()
Me.Label4.Text = "Het downloaden is geslaagd."

MessageBox.Show("Het downloaden van de update is met succes geslaagd", "Geslaagd", MessageBoxButtons.OK, MessageBoxIcon.Information)

Button1.Enabled = False
End If

Me.ProgressBar1.Value = 0

Me.Label3.Text = "Bestandsgrootte: "
Me.Label2.Text = "Download snelheid: "
Me.Label4.Text = ""

End Sub
Public Sub ChangeTexts(ByVal length As Long, ByVal position As Integer, ByVal percent As Integer, ByVal speed As Double)

Me.Label3.Text = "Bestandsgrootte: " & Math.Round((length / 1000000), 2) & " MB"



Me.Label4.Text = "Gedownload.. " & Math.Round((position / 1000000), 2) & " MB van " & Math.Round((length / 1000000), 2) & "MB (" & Me.ProgressBar1.Value & "%)"

If speed = -1 Then
Me.Label2.Text = "Download snelheid: berekenen..."

Else
Me.Label2.Text = "Download snelheid: " & Math.Round((speed / 1024), 2) & " KB/s"
End If

Me.ProgressBar1.Value = percent


End Sub

Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim theResponse As HttpWebResponse
Dim theRequest As HttpWebRequest
Try

theRequest = WebRequest.Create(TextBox1.Text)
theResponse = theRequest.GetResponse
Catch ex As Exception

MessageBox.Show("Er is een fout opgetreden bij het downloaden van het bestand. Mogelijke oorzaken:" & ControlChars.CrLf & _
"1) Ongeldige bestand" & ControlChars.CrLf & _
"2) De server ligt plat", "Fout", MessageBoxButtons.OK, MessageBoxIcon.Error)

Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

Me.Invoke(cancelDelegate, True)

Exit Sub
End Try

Dim length As Long = theResponse.ContentLength

Dim safedelegate As New ChangeTextsSafe(AddressOf ChangeTexts)
Me.Invoke(safedelegate, length, 0, 0, 0)

Dim writeStream As New IO.FileStream(Me.whereToSave, IO.FileMode.Create)


Dim nRead As Integer


Dim speedtimer As New Stopwatch
Dim currentspeed As Double = -1
Dim readings As Integer = 0

Do

If BackgroundWorker1.CancellationPending Then
Exit Do
End If

speedtimer.Start()

Dim readBytes(4095) As Byte
Dim bytesread As Integer = theResponse.GetResponseStream.Read(readBytes, 0, 4096)

nRead += bytesread
Dim percent As Short = (nRead * 100) / length

Me.Invoke(safedelegate, length, nRead, percent, currentspeed)

If bytesread = 0 Then Exit Do

writeStream.Write(readBytes, 0, bytesread)

speedtimer.Stop()

readings += 1
If readings >= 5 Then
currentspeed = 20480 / (speedtimer.ElapsedMilliseconds / 1000)
speedtimer.Reset()
readings = 0
End If
Loop


theResponse.GetResponseStream.Close()
writeStream.Close()

If Me.BackgroundWorker1.CancellationPending Then

IO.File.Delete(Me.whereToSave)

Dim cancelDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

Me.Invoke(cancelDelegate, True)

Exit Sub

End If

Dim completeDelegate As New DownloadCompleteSafe(AddressOf DownloadComplete)

Me.Invoke(completeDelegate, False)


End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Button2.Enabled = True
Try


If TextBox1.Text <> "" AndAlso TextBox1.Text.StartsWith("http://") Then


Me.SaveFileDialog1.FileName = TextBox1.Text.Split("/"c)(TextBox1.Text.Split("/"c).Length - 1)

If Me.SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then

Me.whereToSave = Me.SaveFileDialog1.FileName

Me.SaveFileDialog1.FileName = ""



TextBox1.Enabled = False
Button1.Enabled = False
Button2.Enabled = True

Me.BackgroundWorker1.RunWorkerAsync()
Timer1.Start()
End If

Else

MessageBox.Show("De link is momenteel onbereikbaar.", "Waarschuwing", MessageBoxButtons.OK, MessageBoxIcon.Warning)

End If



Catch ex As Exception


End Try

End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Try
Me.BackgroundWorker1.CancelAsync()
Catch ex As Exception

End Try
End Sub

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Label1.Text = ProgressBar1.Value.ToString() & "%"
End Sub
End Class[/CPP]

Plaatje dat de plaats van de error aangeeft: error.png

Graag jullie hulp
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan