Kopieren mit ProgressBar

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Hubertus.

    Kopieren mit ProgressBar

    Hallo Forum,

    Mir war ein bisschen langweilig. Deswegen hab ich für euch ein kleines Tool gebastelt. Mit dem tool wie ihr wohl schon seht kann man ordner mit einer ProgressBar anzeige kopieren. Bei diesem Tool ist neu das die Ordner samt unterodrner komplett kopiert werden. Vielleicht könnte man es noch kürzer machen. Ich weiß es gerade nicht.

    Ihr braucht:

    Eine ProgessBar (Name = ProgressBar1)
    Ein Button (Name = Button2)
    Ein Label (Name = Label_Status)


    Habt spaß dabei.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Sub Button2_Click() Handles Button2.Click
    2. Control.CheckForIllegalCrossThreadCalls = false
    3. Dim T As New Thread(AddressOf Kopierern1)
    4. T.Start()
    5. End Sub
    6. Sub KopiereDateivon(ByVal Source As String, ByVal Target As String, Optional ByVal Überrschreiben As Boolean = True)
    7. File.Copy(Source, Target, Überrschreiben)
    8. End Sub
    9. Sub Kopierern1()
    10. Dim verzeichnis As String = My.Computer.FileSystem.SpecialDirectories.Desktop + "\" ' vom kopier verzeichnis
    11. Dim insverzeichnis As String = "r\" ' ins kopier verzeichnis
    12. Dim OrdnerListe As New List(Of String)
    13. Dim DateiListe As New List(Of String)
    14. For Each Ordner In My.Computer.FileSystem.GetDirectories(verzeichnis, FileIO.SearchOption.SearchAllSubDirectories) ' Ordner Suchen
    15. Ordner = Ordner.Replace(verzeichnis, "")
    16. OrdnerListe.Add(Ordner) ' Ordner in die Liste einfügen
    17. Directory.CreateDirectory(insverzeichnis + Ordner) ' Unterordner erstellen
    18. Next
    19. For Each Datei In My.Computer.FileSystem.GetFiles(verzeichnis, FileIO.SearchOption.SearchAllSubDirectories) ' Dateien Suchen
    20. Datei = Datei.Replace(verzeichnis, "")
    21. DateiListe.Add(Datei) ' Dateien in die Liste einfügen
    22. Next
    23. ProgressBar1.Maximum = DateiListe.Count ' ProgressBar einstellen
    24. ProgressBar1.Value = "0"
    25. For Each file In DateiListe ' Dateien Kopieren
    26. Dim DateiInfo As String = My.Computer.FileSystem.GetFileInfo(verzeichnis + file).Name ' DateiName
    27. Label_Status.Text = DateiInfo ' Der Status muss ja auch angezeigt werden ^^
    28. KopiereDateivon(verzeichnis + file, insverzeichnis + file) ' Datei kopieren
    29. ProgressBar1.Increment(1) ' ProgressBar füllen
    30. Next
    31. Msgbox("Fertig!",MsgboxStyle.Information,"Info")



    Euer Mr. VB

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Mr. VB“ ()

    Hallo, ich beziehe mich auf den Beitrag von >>SystemUnknow<< und dem Beispiel
    vbarchiv.net/tipps/tipp_1693-f…selber-erstellen-net.html
    Ich habe das Beispiel in meinem Programm angepasst und integriert. Es funktioniert normal ohne Probleme. Nun ist doch ein Problem aufgetaucht. Ich muss größere ZIP-Dateien kopieren, in denen MOV, PCX, PDF Dateien enthalten sind. Die Größe der ZIP-Dateien übersteigen manchmal den max. Integer-Wert. Im Quellcode steht darüber:
    > m_Progressbar.Maximum = SourceFile.Length
    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.

    Leider habe ich keine Ahnung, wie ich den Maximumwert anders definieren soll. Ich hoffe, ihr könnt mir helfen
    Danke und Gruß
    Hubertus
    1. Bitte das nächste Mal einen neuen Thread eröffnen und ggf. den alten Thread verlinken. RIP, alter Thread.
    2. Gar nicht. Die ProgressBar-Maimum-Property ist vom Typ Integer. Punkt. Daher bliebe nur, eine eigene ProgressBar zu kreieren, die einen anderen Datentyp für Maximum hat.
    3. Muss man wirklich bytegenau eine GB-große Datei messen? Warum nicht einfach eine Messung im MB-Bereich? Dateilänge durch 1024 teilen und diesen Wert als Max. nehmen. PBar-Sprünge müssen dann natürlich anhand der MB-Veränderung/-Fortschritts gemessen werden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Hubertus schrieb:

    VB.NET-Quellcode

    1. m_Progressbar.Maximum = SourceFile.Length
    Wenn Du die Datei bitweise kopierst, müsstest Du da noch einen Faktor 8 dranhängen. :thumbsup:
    ====
    Wenn Du die Datei in 1 MByte-Blöcken kopierst, langt das Maximum hoffentlich.
    Noch einfacher ist es, wenn Du 100 als Maximum lässt und den Kopierstand in Prozent ausrechnest und anzeigst, da musst Du nicht mal das Maximum der ProgressBar anfassen.
    ====
    Wie Du siehst, führen viele Wege nach Rom.
    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!