Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0041: Ordner rekursiv kopieren

 von 

Beschreibung

Kopiert einen Ordner und seine Inhalte rekursiv in einen anderen Ordner.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [1,6 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2002/2003
' Option Strict:    Aus
' Option Explicit:  An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.XML
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Data
'  - System.Diagnostics
'

' ##############################################################################
' ############################# modCopyFolder.vb ###############################
' ##############################################################################
Imports System.IO

Module modCopyFolder
    Sub Main()
        Console.Write("Quellordner: ")
        Dim Source As String = Console.ReadLine()

        Console.WriteLine()
        Console.Write("Zielordner: ")
        Dim Destination As String = Console.ReadLine()

        If Source <> "" And Destination <> "" Then _
            CopyFolder(Source, Destination)
    End Sub

    Public Sub CopyFolder(ByVal Path As String, _
        ByVal NewPath As String, _
        Optional ByVal OverWrite As Boolean = True)

        'Wenn Ordner nicht existiert, erstellen.
        If Directory.Exists(NewPath) = False Then _
            Directory.CreateDirectory(NewPath)

        Dim i As Long

        'Dateien im Ordner:
        Dim Files() As String = Directory.GetFiles(Path)
        'Ordner im Ordner:
        Dim Dirs() As String = Directory.GetDirectories(Path)

        ' Dateien kopieren:
        For i = 0 To Files.Length - 1
            If OverWrite Then
                If File.Exists(NewPath & "\" & Files(i).ToString.Split("\") _
                    (Files(i).ToString.Split("\").Length - 1)) = True Then

                    ' Wenn Datei bereits existiert, löschen
                    File.Delete(NewPath & "\" & Files(i).ToString.Split("\") _
                        (Files(i).ToString.Split("\").Length - 1))
                End If
            End If

            'Datei kopieren
            File.Copy(Files(i).ToString, NewPath & "\" & _
            Files(i).ToString.Split("\") _
            (Files(i).ToString.Split("\").Length - 1))
        Next

        ' Unterverzeichnisse kopieren
        For i = 0 To Dirs.Length - 1
            If Dirs(i) <> NewPath Then

                ' Das Ganze nochmal mit dem aktuellen Unterordner
                CopyFolder(Dirs(i), NewPath & "\" & _
                    Dirs(i).ToString.Split("\") _
                    (Dirs(i).ToString.Split("\").Length - 1))
            End If
        Next
    End Sub
End Module

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Dom am 21.11.2009 um 15:04

Super Source,

aber ein Problem habe ich jetzt trotzdem noch. Wenn ich den Quell und Zielpfad per Textbox bestimmen lassen will, erstellt er nur das Verzeichnis und kopiert keine Dateien.

Den Sourcecode habe ich entsprechend angepasst aber es läuft nicht.

Wenn ich alles so mache wie es im Source steht, und den Pfad nachher per Copyfolder(path:="Quelle", newpath:="Ziel", overwrite:=true) angebe, dann funktioniert es.

Kann mir da einer weiterhelfen?

Kommentar von Heiko Apfelbach am 13.05.2009 um 10:59

Hallo,

ich möchte dieses Modul sehr gerne verwenden!
Jetzt wollt ich fragen mit welchem Aufruf dieses Modul gestartet wird!?

Gedankengang: Copyfolder ("XXX", "xxxx") ?

Gruß Heiko

Kommentar von Eckard Ahlers am 28.11.2007 um 20:11

Hi!

VB7 kennt auch [lang]File.Copy(ByVal sourceFileName As String, ByVal destFileName As String, ByVal overwrite As Boolean)[/lang]
Bei overwrite:=True bräuchten die Files nicht vorher extra gelöscht zu werden.
In VB8 gibts sogar[lang]Directory.GetDirectories(ByVal path As String, ByVal searchPattern As String, ByVal searchOption As System.IO.SearchOption) As String()[/lang]
Bei searchOption = SearchOption.AllDirectories
braucht man nicht mal mehr eine Rekursion zu proggen.

Kommentar von Tobi am 21.12.2004 um 00:22

Funktioniert prima - Dankeschön!