Datei verschieben mit Rückmeldung wie viel % schon verschoben wurde

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von mcdt.

    Datei verschieben mit Rückmeldung wie viel % schon verschoben wurde

    Hi,

    ich habe eine Methode geschrieben welche mir eine Datei umkopiert und eine Rückmeldung gibt wie viel der Datei schon umkopiert ist.
    Das ganze dauert allerdings bei releativ großen dateien (>100MB) schon ziemlich lange.
    Das "On Board" Mittel System.IO.File.Move() verschiebt zwar eine Datei, allerdings ohne Rückmeldung wie viel schon verschoben wurde.

    Kann man folgende Code irgendwie beschleunigen, bzw gibt es eine bessere Methode ?

    VB.NET-Quellcode

    1. ProgressBar1.Maximum = 100
    2. ProgressBar1.Minimum = 0
    3. Dim Quellpfad As String = "D:\_Tmp\test.zip"
    4. Dim ZielPfad As String = "D:\_Tmp\Kopie.zip"Dim OrginalFileStream As New System.IO.FileStream(Quellpfad, IO.FileMode.Open)
    5. Dim KopieFileStream As New System.IO.FileStream(ZielPfad, IO.FileMode.Create)Dim bReader As New System.IO.BinaryReader(OrginalFileStream)
    6. Dim bWriter As New System.IO.BinaryWriter(KopieFileStream)For i = 0 To bReader.BaseStream.Length - 1
    7. bWriter.Write(bReader.ReadByte)ProgressBar1.Value = CInt((100 * i) / bReader.BaseStream.Length)
    8. Next
    9. bReader.Close()
    10. bWriter.Close()




    mfg
    Ich würde die Datei nicht unbedingt in Byte-Häppchen zerlegen.
    Nimm größere Einheiten, z.B. 1 MegaByte.
    Dann musst Du aber das Fileende überwachen, wenn Du fertig bist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,

    besten Dank für den Tip.

    habe es jetzt folgendermaßen gelöst:

    VB.NET-Quellcode

    1. For i = 0 To bReader.BaseStream.Length - 1 Step 1024 * 1024
    2. bWriter.Write(bReader.ReadBytes(1024 * 1024))
    3. ProgressBar1.Value = CInt((100 * i) / bReader.BaseStream.Length)Next