Moin!
Ich habe eine Sub die eine Dateikopieren soll, mit einer Progressbar.
Wenn die Datei klein ist, geht es.
Aber sobald die Datei groß ist also ein Long.
Dann erscheint eine Fehlermeldung!
Die Fehlermeldung wird bei diesem Code angezeigt:
pgbDateiProzent.Maximum = SourceFile.Length
Weil die Progressbar nur ein Integer erfassen kann.
Kann mir jemand bitte mitteilen, wie man das Problem am schnelsten beheben kann?
BIG THX
Die arithmetische Operation hat einen Überlauf verursacht
Ich habe eine Sub die eine Dateikopieren soll, mit einer Progressbar.
Wenn die Datei klein ist, geht es.
Aber sobald die Datei groß ist also ein Long.
Dann erscheint eine Fehlermeldung!
Die Fehlermeldung wird bei diesem Code angezeigt:
pgbDateiProzent.Maximum = SourceFile.Length
Weil die Progressbar nur ein Integer erfassen kann.
Kann mir jemand bitte mitteilen, wie man das Problem am schnelsten beheben kann?
BIG THX
Die arithmetische Operation hat einen Überlauf verursacht
VB.NET-Quellcode
- Option Strict On
- Public Class Form1
- Private Sub Copy(ByVal SourceFile As String, ByVal Target As String)
- ' Progressbar anpassen
- pgbDateiProzent.Value = 0
- ' Es gilt hier zu beachten, dass der Maximumwert ein Integer ist und
- ' daher die Length-Angabe über dem Bereich des Integer hinaus liegen kann.
- ' In so einem Fall müsste man den Maximumwert anders definieren
- pgbDateiProzent.Maximum = SourceFile.Length
- ' Quelle
- Dim fsmsource As FileStream = Nothing
- ' Zieldatei
- Dim fsmtarget As FileStream = Nothing
- Try
- ' Größe des bei jedem Durchlauf einzulesenden Datenpaketes
- Dim buffersize As Int32 = 1024 * 30 ' (30 KByte)
- ' Enthält nacher die in buffersize angegeben Menge an
- ' eingelesenen Daten
- Dim buffer(buffersize) As Byte
- ' Ermittelt die tatsächliche eingelesene Menge an Daten
- ' im Bytearray readbyte
- Dim readbyte As Int32
- ' Quelldatei
- fsmsource = New FileStream(SourceFile.FullName, FileMode.Open,
- FileAccess.Read, FileShare.Read)
- ' Zieldatei
- fsmtarget = New FileStream(Target + "\" + SourceFile.Name,
- FileMode.OpenOrCreate, FileAccess.Write)
- ' Aktuele Datei anzeigen
- Me.lblDateiAktuelStatus.Text = SourceFile.Name
- ' Daten nach und nach einlesen und im Zielstream wieder zurückschreiben
- While fsmsource.Position < fsmsource.Length
- ' Quelle einlesen
- readbyte = fsmsource.Read(buffer, 0, buffersize)
- ' In das Ziel schreiben
- fsmtarget.Write(buffer, 0, readbyte)
- ' Value Eigenschaft der Progressbar anpassen, das Label gibt
- ' den prozentualen Fortschritt an
- With pgbDateiProzent
- .Value += readbyte
- lblDateiProzent.Text = CStr(CInt(100 * .Value / .Maximum)) + "%"
- End With
- ' Reporten
- Application.DoEvents()
- End While
- ' Streams schließen
- fsmsource.Close()
- fsmtarget.Close()
- Catch ex As Exception
- MsgBox(ex.Message)
- End Try
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Copy("F:\Temp\Auto.jpg", Me.txtZielverzeichnis.Text)
- End Sub
- End Class
Visual Basic.NET
MS-SQL
MS-SQL