Hi
Beim kopieren einer Datei mit gerade mal 32 MB erhalten ich folgende Fehlermeldung als Errormeldung:
Die arithmetische Operation hat einen Überlauf verursacht.
Will damit eigentlich meine eigenen Sicherungen nochmal extern sichern... Die Dateien sind ca. 60 GB Gross. Daher kommt mir das gerade nicht so recht, wenn das Programm dies abbricht...
Hier mal der Code der Kopiert:
Ich vermute mal das hat was mit dieser Zeile zu tun?
' Größe des bei jedem Durchlauf einzulesenden Datenpaketes
Dim buffersize As Int32 = 1024 * 30 ' (30 KByte)
Was müßte ich daran den ändern, daß ich auch Dateien > 50 GB noch kopieren kann??
lg lris08
Beim kopieren einer Datei mit gerade mal 32 MB erhalten ich folgende Fehlermeldung als Errormeldung:
Die arithmetische Operation hat einen Überlauf verursacht.
Will damit eigentlich meine eigenen Sicherungen nochmal extern sichern... Die Dateien sind ca. 60 GB Gross. Daher kommt mir das gerade nicht so recht, wenn das Programm dies abbricht...
Hier mal der Code der Kopiert:
VB.NET-Quellcode
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- ' Quelldatei auswählen
- Dim sourcefile As FileInfo
- sourcefile = New FileInfo(Label13.Text)
- ' Zielverzeichnis auswählen
- Dim target As String
- target = Label12.Text
- ' Kopiervorgang starten
- Copy2(sourcefile, Label12.Text)
- End Sub
VB.NET-Quellcode
- Private Sub Copy2(ByVal SourceFile As FileInfo, ByVal Target As String)
- ' Progressbar anpassen
- ProgressBar2.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
- ProgressBar2.Maximum = SourceFile.Length
- Try
- ' Quelle
- Dim fsmsource As FileStream
- ' Zieldatei
- Dim fsmtarget As FileStream
- ' 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)
- ' 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 ProgressBar2
- .Value += readbyte
- Label20.Text = CStr(CInt(100 * .Value / .Maximum)) + "%"
- End With
- ' Reporten
- Application.DoEvents()
- End While
- ' Streams schließen
- fsmsource.Close()
- fsmtarget.Close()
- MsgBox("Datei erfolgreich kopiert", MsgBoxStyle.Information)
- ProgressBar2.Value = 0
- Label20.Text = "0%"
- Catch ex As Exception
- MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
- End Try
- End Sub
Ich vermute mal das hat was mit dieser Zeile zu tun?
' Größe des bei jedem Durchlauf einzulesenden Datenpaketes
Dim buffersize As Int32 = 1024 * 30 ' (30 KByte)
Was müßte ich daran den ändern, daß ich auch Dateien > 50 GB noch kopieren kann??
lg lris08
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()