Hallo Comm,
ich hatte gerade ein wenig langeweile und habe mich mal an ein kleines Programm gesetzt was Datein kopieren kann mit Fortschritt und verbleibender Zeit. Der Code ist eigentlich in C# geschrieben aber hier bekommt ihr ihn natürlich in VB, ist ja klar. Wer dennoch den C# Code haben möchte kann mich gerne per PN fragen ;).
Die Form:
2x Textbox (txtFrom und txtTo) - txtFrom für die Datei die Kopiert werden soll und txtTo whin sie kopiert werden soll
1x ProgressBar (pbStatus) - Ist wohl klar wofür
1x Label (lblSec) - Für die verbleibende Zeit. So jetzt der Code:
1x Button (btnCopy) - Sollte klar sein
Die Zeit berechnung ist ein bissl holperig, funktioniert aber :). Wenn ihr den Vorgang abbrechen wollt müsst ihr cancel auf True setzen.
Ich habe das ganze jetzt nicht in einen Backgroundworker gemacht, wäre für eine größere Nutzung im Programm aber denkbar
progglord
ich hatte gerade ein wenig langeweile und habe mich mal an ein kleines Programm gesetzt was Datein kopieren kann mit Fortschritt und verbleibender Zeit. Der Code ist eigentlich in C# geschrieben aber hier bekommt ihr ihn natürlich in VB, ist ja klar. Wer dennoch den C# Code haben möchte kann mich gerne per PN fragen ;).
Die Form:
2x Textbox (txtFrom und txtTo) - txtFrom für die Datei die Kopiert werden soll und txtTo whin sie kopiert werden soll
1x ProgressBar (pbStatus) - Ist wohl klar wofür

1x Label (lblSec) - Für die verbleibende Zeit. So jetzt der Code:
1x Button (btnCopy) - Sollte klar sein
VB.NET-Quellcode
- Imports System.IO
- Public Class Form1
- Public cancel As Boolean = False
- Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCopy.Click
- 'Kopieren
- If File.Exists(txtTo.Text) Then
- File.Delete(txtTo.Text)
- End If
- If File.Exists(txtFrom.Text) Then
- 'Streams
- Dim fromStream As FileStream = New FileStream(txtFrom.Text, FileMode.Open)
- Dim toStream As FileStream = New FileStream(txtTo.Text, FileMode.CreateNew)
- 'Variablen
- Dim total As Long = fromStream.Length
- Dim current As Long = 0
- Dim buffer(1024) As Byte
- Dim kbRemaining As Integer = 0
- Dim secRemaining As Integer = 0
- Dim kbs As Double = 0.0
- Dim eta As TimeSpan
- Dim startTime As DateTime
- 'Schleife
- cancel = False
- startTime = DateTime.Now
- Do
- 'Prüfen ob abgebrochen wurde
- If cancel Then
- fromStream.Close()
- toStream.Close()
- Exit Sub
- End If
- 'Bytes(lesen)
- Dim read As Integer = fromStream.Read(buffer, 0, buffer.Length)
- 'Bytes in die Datei schreiben
- toStream.Write(buffer, 0, read)
- 'current erhöhen
- current += read
- 'Prozente errechen
- Dim Prozent As Integer = current * 100 / total
- pbStatus.Value = Prozent
- 'Eta
- eta = startTime.Subtract(DateTime.Now)
- 'KB und Zeit verbleibend
- kbRemaining = (current - total) / 1024
- If eta.Seconds <> 0 Then
- 'KB pro Sekunde
- kbs = Math.Round((current / 1024) / (eta.Seconds), 2)
- secRemaining = kbRemaining / kbs
- End If
- lblSec.Text = "Verbleibend: " + secRemaining.ToString() + " Sekunden"
- Application.DoEvents()
- Loop While (total <> current)
- cancel = False
- fromStream.Close()
- toStream.Close()
- End If
- End Sub
- End Class
Die Zeit berechnung ist ein bissl holperig, funktioniert aber :). Wenn ihr den Vorgang abbrechen wollt müsst ihr cancel auf True setzen.
Ich habe das ganze jetzt nicht in einen Backgroundworker gemacht, wäre für eine größere Nutzung im Programm aber denkbar

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