Visual Basic 2010 Ordner Kopieren mit Progresbar

Visual Basic 2010 Ordner Kopieren mit Progressbar

Hallo und guten Abend,
zuerst ich bin ein noob was das Programmieren angeht, aber ich möchte es lernen.

Meine Frage, ich möchte eine Form mit VB 2010 erstellen mit einem Button und einer Statusanzeige.Wenn ich auf den Button Klicke soll eine auswahl kommen, wo ich den Ordner(3Gb) hin kopiert haben möchte und die Statusanzeige soll mir zeigen wann der Kopierforgang zu ende ist.
Das ganze soll von DVD startbar sein.

Ich habe einen spatzielen Ordner „test“(3Gb) der kopiert werden soll an einen beliebigen Ort.

habe schon viel gelesen aber nirgens durchgeblickt.

was ich bis her habe zeigt mir einen fehler.

mein bisheriger SourceCode:
hoffe das darf ich hir reinschreiben?

Public Class Form1

Dim m_Progressbar As Object

Private Property Val As Object

Private Property max As Object

Private Sub Button_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button.Click

’ Quelldatei auswählen
Dim sourcefile As FileInfo
With New OpenFileDialog
.Title = „D:\Daten\Neuer Ordner“
If .ShowDialog = Windows.Forms.DialogResult.OK Then
sourcefile = New FileInfo(.FileName)
Else
Exit Sub
End If
End With

’ Zielverzeichnis auswählen
Dim target As String
With New FolderBrowserDialog
.Description = „D:\Daten\test“
If .ShowDialog = Windows.Forms.DialogResult.OK Then
target = .SelectedPath
Else
Exit Sub
End If
End With

’ Kopiervorgang starten
Copy(sourcefile, target)
End Sub

Private Sub Copy(ByVal SourceFile As FileInfo, ByVal Target As String)
’ Progressbar anpassen
Dim i As Integer
ProgressBar1.Value = 0
For i = 0 To 100

Dim j As Integer
For j = 0 To 10000000
Next j

ProgressBar1.Value = i
Label3.Text = i.ToString + „/100“
Next i

’ 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
ProgressBar1.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

Hallo, für die jenigen die es interesiert. Ich hab es geschaft, aber in der Source können noch unnötige dinge sein aber es funktioniert.

SourceCode:
Public Class Form1

Dim sourcefile As String
Dim i As String

Private Property Input As String

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim target As String
Dim d As Integer
d = d + 1
sourcefile = „Daten“ ’ Zu kopierender Ordner
With New FolderBrowserDialog
.Description = „Zielordner angeben“
If .ShowDialog = Windows.Forms.DialogResult.OK Then
target = .SelectedPath
Label1.Text = i
Label1.Refresh()
My.Computer.FileSystem.CopyDirectory(sourcefile, target, True)
ProgressBar1.Value = ProgressBar1.Value + ((100 / d) - 0.5).ToString(„00“) ’ ausrechnung der prozente (bis ca. 4% fehlhaft) wird jedoch unten koriegiert
Label1.Text = ProgressBar1.Value & „%“
Label1.Refresh()
ProgressBar1.Value = ProgressBar1.Maximum ’ prozent auf 100% gestellt da es sein kann dass eine nicht mit 100 dividierte zahl von datein geben kann und so koennte die maximum.value ueberschritten werden und due kriegst ein error
Label1.Text = ProgressBar1.Value & „%“ ’ auf 100% gesetzt
Exit Sub
End If
End With
End Sub
End Class

Hi

Ich hab den Code zwar nur überflogen, aber dennoch sind mir paar Dinge aufgefallen, die mir spanisch vorkommen.

ProgressBar1.Value = ProgressBar1.Value + ((100 / d) - 0.5).ToString(„00“)

Das dürfte nach meinem Wissen gar nicht funktionieren, da du hier versuchst einen String in einen numerischen Datentypen umzuwandeln, ohne es explizit anzugeben. Vielleicht unterstützt Visual Basic .NET so etwas, aber es ist auf jeden Fall kein guter Stil^^

Desweiteren glaube ich nicht, dass die Progressbar so arbeitet, wie du es wolltest. Hier wird nämlich der gesamte Ordner kopiert und erst nach Ablauf dieses Vorgangs wir der Wert der Progressbar gesetzt. Du siehst an ihr also, wann der Vorgang zuende ist, aber nicht wie weit er fortgeschritten ist.

Dim d As Integer
d = d + 1

Das dürfte auch nicht viel Sinn machen. Du erstellst eine Variable und erhöhst sie um 1. Die Variable wird aber an dieser Stelle IMMER WIEDER mit 0 initialisiert, als es ist nicht so, dass sie irgendewann 2 oder 3 oder 4 oder irgendeinen anderen Wert als 0 oder 1 hat.

Ich hoffe da waren ein paar nützliche Hinweise darunter^^
MfG IGnow