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:
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:
Graag jullie hulp
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:
Graag jullie hulp