martin.s

Visual Basic.net Ordner vergleichen

Hallo,

ich stehe vor einem Problem, bei dem ich nicht weiterkomme.

Aufgabe ist es, ein Programm zu schreiben, welches zwei Ordner miteinander vergleicht. Nach einem Update soll der geänderte Ordner mit einem Referenzordner verglichen werden. Alle Dateien, die geändert wurden oder neu hinzugekommen sind, sollen in einen neuen Ordner kopiert werden. Dabei darf die Ordnerstruktur nicht geändert werden. Es müssen also alle Dateien in die gleichen Unterordner kopiert werden.

Ich hoffe, ich konnte darlegen, was die Aufgabenstellung ist; kann aber bei Bedarf gerne versuchen, noch genauer zu werden.

Ich bin, nach einigem Suchen im Internet, soweit, dass der Vergleich der Dateien und das Kopieren unterschiedlicher Dateien funktioniert. Nur bei dem rekursiven Aufruf der Funktion hapert es noch: Zwar werden auch die Unterordner durchsucht und unterschiedliche Dateien kopiert, allerdings leider ohne die Unterordner, d.h. die Ordnerstruktur wird nicht mitkopiert. Langsam aber sich bin ich verzweifelt. Hier meine Funktion, ich hoffe, damit kann jemand was anfangen und ein bisschen Hilfestellung geben.

    Public Sub vergleichDir(ByVal verz1 As DirectoryInfo, ByVal verz2 As DirectoryInfo)
        Dim sourceDir As New DirectoryInfo(verz1.FullName)
        Dim destdir As New DirectoryInfo(verz2.FullName)
        'Dim oSourceSubDir As DirectoryInfo
        Dim oDestSubDir As DirectoryInfo
        'Dim sourceFile As FileInfo
        Dim iCounter As Integer = 0
        Dim anzahlSubDirs As Integer = 0

        For Each sourceFile As FileInfo In sourceDir.GetFiles
            For Each destFile As FileInfo In destdir.GetFiles
                If (sourceFile.Length = destFile.Length) Then
                    'MsgBox("Vorhanden", "1", "Erfolg." & iCounter)
                ElseIf (sourceFile.Length <> destFile.Length) Then
                    sourceFile.CopyTo("ZIELPFAD" + sourceFile.Name, 1)
                    iUnterschiede = iUnterschiede + 1
                ElseIf (Not destdir.GetFiles.Contains(sourceFile)) Then
                    MsgBox("Datei " & sourceFile.Name & " nicht vorhanden. Wird nun ersetzt.", "1", iCounter)
                    sourceFile.CopyTo("ZIELPFAD" + sourceFile.Name, 1)
                    MsgBox(iCounter + " Dateien kopiert.")
                Else
                    MsgBox("Keiner der obrigen Fälle!!")
                End If
            Next 
        Next

        Try
            For Each oSourceSubDir As DirectoryInfo In sourceDir.GetDirectories()
                For Each oDestSubDir In destdir.GetDirectories()
                    'MsgBox("oSourceSubDir: " + oSourceSubDir.Name)
                    'MsgBox("oDestSubDir: " + oDestSubDir.Name)
                    CopyFolder(oSourceSubDir.Name, "ZIELPFAD" & oSourceSubDir.Name, 1, 1)
                    vergleichDir(oSourceSubDir, oDestSubDir)
                    'MsgBox("Anzahl Verzeichnisse: " + anzahlSubDirs)
                Next
                'MsgBox("Unterordner" + anzahlSubDirs)
            Next
        Catch ex As Exception
        End Try
    End Sub
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 165228

Url: https://administrator.de/forum/visual-basic-net-ordner-vergleichen-165228.html

Ausgedruckt am: 17.07.2025 um 16:07 Uhr

99426
99426 27.04.2011 um 15:22:08 Uhr
Hallo Martin!

Ich weiß zwar nicht ob ich dir damit helfen kann, weil ich in VB nicht gerade ein Profi bin, aber versuche es vielleicht mal hiermit. Ich hoffe, das hilft dir weiter und du kannst es mit deinem Programm sinnvoll kombinieren. Wenn nicht, schau dir die Seite vielleicht mal an, ob sich was brauchbares findet.

vbarchiv.net/tipps/tipp_2131-datenbestaende-ordner-syncronisiere ...


ActiveVB (activevb.de) ist auch nicht schlecht, wenn man mal Snippeds sucht.


LG, Harald
Martin.S
Martin.S 27.04.2011 um 16:22:49 Uhr
Hallo Harald,

erstmal Danke für Deine Antwort.

Das von Dir gepostete Programm habe ich auch gefunden, leider funktioniert das nicht so, wie ich mir das vorstelle. Die beiden Ordner wollte ich nicht verändern, in dem Programm wird aber der eine Ordner geändert. Ich schau nochmal, ob ich da einen anderen Zielordner hinbekomme.

ActiveVB kenn ich nicht, leider kann ich den Link nicht öffnen...

Danke für die Antwort und immer noch ratlose Grüße

Martin
99426
99426 27.04.2011 um 17:57:30 Uhr
Der Link lautet activevb.de . Das hast du aber sicher schon selbst herausgefunden. Da hat sich am Ende eine Klammer ein-geschmuggelt.
Schade dass ich nicht helfen konnte.