Hallo,
danke Manfred, Dein Programm funktioniert. Jedoch werden leere Ordner nicht mit kopiert. Das sollte ich allerdings auch noch hinbekommen.
Jetzt versuche ich, das Problem selbst zu lösen, um einen gewissen Lerneffekt zu erzielen. Mein Programm funktioniert soweit schon, jedoch nur auf einer Ebene. Die Unterordner der Unterordner(ich hoffe, ihr wisst, was ich meine) werden noch nicht mit kopiert. Der rekursive Aufruf scheint irgendwo zu hängen. Vielleicht kann einer von euch beiden da noch mal einen Blick drauf werfen, wo der Haken ist.
@Micke:
Die Unterschiede der Dateien erfasse ich, indem ich die Dateien auf unterschiedliche Länge teste.
Hier mein Code:
#Region "Verzeichnisse vergleichen, vergleichDir"
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 refDir As New DirectoryInfo("ZIELVERZEICHNIS")
Dim oDestSubDir As DirectoryInfo
Dim sourceFile As FileInfo
Dim pfad As String
Dim iCounter As Integer = 0
Dim anzahlSubDirs As Integer = 0
For Each sourceFile In sourceDir.GetFiles
For Each destFile As FileInfo In destdir.GetFiles
If (sourceFile.Length = destFile.Length) Then
ElseIf (sourceFile.Length <> destFile.Length) Then
sourceFile.CopyTo(refDir.FullName + 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(refDir.FullName + 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( _
)
pfad = oSourceSubDir.Name
For Each oDestSubDir In destdir.GetDirectories()
If (Not destdir.GetDirectories.Contains(oSourceSubDir)) Then
refDir.CreateSubdirectory(oSourceSubDir.Name)
pfad = refDir.FullName + pfad + "\"
For Each d As FileInfo In oSourceSubDir.GetFiles("*.*")
Dim str As String = Mid(d.FullName, _
d.FullName.LastIndexOf("\") + 2)
d.CopyTo(pfad & str)
'vergleichDir(oSourceSubDir, oDestSubDir)
Next
vergleichDir(oSourceSubDir, oDestSubDir)
Else
pfad = oSourceSubDir.Name
MsgBox("Pfad: " + pfad)
CopyToFolder(oSourceSubDir.Name, refDir.FullName)
MsgBox("SubDirName: " + oSourceSubDir.Name)
'vergleichDir(oSourceSubDir, oDestSubDir)
End If
vergleichDir(oSourceSubDir, oDestSubDir)
Next
Next
Catch ex As Exception
End Try
'MsgBox("Dateien kopiert.")
End SubNachtrag:
Ich habe mir an wichtigen Stellen mal die aktuell angefassten Dateien und Ordner mal in einer Messagebox ausgeben lassen und gesehen, dass die Datei, die in einem Unter-Unterordner liegt, gar nicht erfasst wird. Das Problem liegt entweder in dem rekursiven Aufruf oder in der gesamten Funktion...
"Sir, we?re surrounded."
"Excellent, we can attack in any direction"
Beitrag wurde zuletzt am 03.05.11 um 10:11:45 editiert. |