Ordner und Unterordner kopieren mit ProgressBar

  • VB.NET

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von alike03.

    Ordner und Unterordner kopieren mit ProgressBar

    Hallo,

    seit einer Woche suche ich eine Lösung aber ohne erfolg.
    Ich suche eine Code womit ich ein Ordner mit dem gesamten Inhalt (Datein und mehrere Unterordner) in einem anderen Ordner kopieren kann und die Kopiervorgang im ProgressBar angezeigt wird.
    Ich habe sehr vieles versucht aber leider funktionierten die nicht genau oder überhaupt nicht.

    LG Ali
    Hallo,

    Zum Kopieren eignet Sich hervorragend die My Klasse, etwa so

    VB.NET-Quellcode

    1. my.Computer.FileSystem.DirectoryCopy("DeinSourceVwerzeichnis", "DeinGewähltesVerzeichniss")


    mit der Progressbar brauchst du glaub ich Multi treading, ich kann mich aber auch Irren

    Grüße Andy
    BITTE BITTE BITTE NICHT! Der My-Namespace ist eine VB-Sache und gibt es nur dort. Wenn du irgendwann was mit C# machst, wirst du dich umgucken! Da gibt es das nämlich nicht!
    Mit freundlichen Grüßen,
    Thunderbolt
    Der My-Namespace verschleiert schlicht die Sicht auf die dahinterstehenden Methoden, die teilweise einiges mehr draufhaben. Sollte man mal was mit C# machen wollen, ist man plötzlich aufgeschmissen, denn da gibt es keinen My-Namespace. In meinen Augen zwei gute Gründe, ihn zu meiden.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    er will aber ein Verzeichniss Kopieren keine File !

    @Trade Langsam frage ich mich ob du Keine Ahnung hast Move Verschiebt den Ornder

    VB.NET-Quellcode

    1. System.IO.Dircetory.Move(pfad, Pfad)
    @Andy16823
    Dann zeig mir doch mal bitte, wie folgendes mit dem My-Namespace aussehen würde, vielleicht kommst du dann selbst drauf:

    VB.NET-Quellcode

    1. Dim fi As new FileInfo("C:\test.txt")
    2. If if.Exists Then
    3. Using fs = fi.OpenRead()
    4. Using sr As New StreamReader(fs)
    5. Do Until sr.EndOfStream
    6. Dim chars As Char()
    7. Dim count = sr.Read(chars, 0, 10)
    8. 'mach irgendwas mit dem Array
    9. Loop
    10. End Using
    11. End Using
    12. End If
    Ich glaub ich hattes schonmal irgendwo gesagt, hab den Post aber nicht wiedergefunden.
    Der My-Namespace ist dafür gedacht wichtige Funktionen zu kapseln, damit man sie schnell und effektiv einsetzen kann. Hierbei sollte einem auffallen, dass diese Funktionen viel weniger bieten können als die "Orginale" und man kommt schnell an seine Grenzen. Ich persönlich finds suboptimal, vorallem wegen der Architektur und da es (bei mir zumindest so) ziemlich unnötig ist und selten bis garnicht zum Einsatz kommt. Abgesehen von den Settings und den Resources, die hätt man imo auch irgendwo anders reinpackn könn.
    Ich habe echt solangsam leid mich die ganze Zeit von euch Beleidigen zu lassen. Giebt doch alle einfach mal bei Goggle ein Verzeichniss Kopiern, was Kommt als 1. MSDN und was wird dort Empholen der My Namespace.
    Das kopieren eines Ordners ist nicht ganz trivial - Rekursion will allermindestens beherrscht sein.
    Im Namespace System.IO gibts da nix fertiges, also warum nicht das nehmen (und testen!), wasses bereits gibt?

    "My ist ranz!!" wird durch endlose Wiederholungen auch nicht wahrer oder falscher, als wenn man es ein einziges Mal als seine Ansicht ausspricht.

    Und solange es ohne Begründung ausgesprochen wird, ist die Aussage selber Ranz, tätich mal aussagen.

    Also bevor noch einer zum x-ten Male das "My ist Ranz!" Dogma raushaut - bitte eine seiner Ansicht nach saubere Methode vorlegen, und den Vorteil erläutern, den diese selbstgebastelte Methode gebenüber der My.Computer.FileSystem.CopyDirectory()-Methode haben soll.

    ErfinderDesRades schrieb:

    Also bevor noch einer zum x-ten Male das "My ist Ranz!" Dogma raushaut - bitte eine seiner Ansicht nach saubere Methode vorlegen, und den Vorteil erläutern, den diese selbstgebastelte Methode gebenüber der My.Computer.FileSystem.CopyDirectory()-Methode haben soll.

    Sehe ich genau so :thumbsup: danke EDR. Es geht ja nicht um die Vorteile der Beiden Namespaces sondern nur um das Kopieren des
    Verzeichnisses :D
    Jeder schreibt was danke aber ich brauche was mit ProgressBar so habe ich selber was zusammengestellt.

    VB.NET-Quellcode

    1. Dim source As String "C:\\Ordner"
    2. Dim Path3 As String "C:\\Ordner2"
    3. ListBox1.Items.Clear()
    4. ListBox1.Items.AddRange(IO.Directory.GetFiles(source, "*", IO.SearchOption.AllDirectories))
    5. Dim Value1 As String = 100 / ListBox1.Items.Count
    6. Dim Value0 As String = Value1
    7. Dim item As String
    8. For Each item In Me.ListBox1.Items
    9. item = item.Replace(source & "\", "")
    10. My.Computer.FileSystem.CopyFile(source & "\" & item, Path3 & "\" & item, True)
    11. ProgressBar1.Value = Value1
    12. Value1 = CDbl(Value1) + CDbl(Value0)
    13. Next


    Nun habe ich leider aber ein anderes problem.
    Beim Kopiervorgang friert das ganze Form und während des gesamten Kopiervorgangs kann ich nichts machen.
    Ich kann nicht einmal das Fenster verschieben aber ProgressBar funktioniert.
    Nun weiß jemand wie ich die Dateien ohne frieren kopieren kann?
    Habe ich mir schon gedacht deswegen Sagte ich Multi Treading, du musst das Kopieren in einem Extra Tread machen,
    hatte ich auchmal bei einem Tool zum Daten Sichern.

    edit habe hier eine Anleitung bezüglichMultitreading support.microsoft.com/kb/315577/de


    also so in etwa

    VB.NET-Quellcode

    1. Private Sub kopieren()
    2. ' hier der kopier Code
    3. End Sub


    im Button Ereigniss das Hinzu und die Berechnung des Fortschritts.

    VB.NET-Quellcode

    1. Dim therd As New System.Threading.Thread(AddressOf kopieren)
    2. therd.IsBackground = True
    3. therd.Start()


    Gruß Andy

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Andy16823“ ()