# Ordnerinhalte vergleichen!



## hazzan (17. Oktober 2004)

hallo, wie kann ich den inhalt von verzeichnissen und unterverzeichnissen vergleichen?
ich möchte ein programm schreiben, dass jede geänderte datei aus ordner1 in ordner2 kopiert.

die kompletten ordnerinhalte zu kopieren würde zu lange dauern 
es soll ein backup programm weden


----------



## wincnc (17. Oktober 2004)

Versuch´s mal so:
FileDateTime zeigt an, wann die Datei das letzte mal geändert wurde.

```
Datei_1 = FileDateTime("C:\Test.txt")
Datei_2 = FileDateTime("C:\UnterOrdner\Test.txt")
If Datei_1 <> Datei_2 Then
' Kopieren
End If
```


----------



## hazzan (17. Oktober 2004)

danke, das ist schon mal gut, nur wie kann ich dennn herausfinden, was in einem ordner ist?


----------



## wincnc (17. Oktober 2004)

Dazu benötigst Du 2 FileListBoxen und einen CommandButton

```
Private Sub Command1_Click()
Dim N As Integer

For N = 0 To File1.ListCount - 1
If FileDateTime(File1.Path & "\" & File1.List(N)) _
<> FileDateTime(File2.Path & "\" & File2.List(N)) Then
FileCopy File1.Path & "\" & File1.List(N), File2.Path & "\" & File2.List(N)
End If
Next
End Sub

Private Sub Form_Load()
File1.Path = "C:\DeinOrdner"
File2.Path = "C:\DeinBackupOrdner"
End Sub
```
Das ist nur ein einfaches Beispiel das keine Unterordner berücksichtigt !
Wenn Du mit Unterordnern arbeiten willst, solltest Du Dich mit FSO (File System Object) beschäftigen.


----------



## hazzan (17. Oktober 2004)

okay, danke!
scheinbar steckt hinter nem kleinen backup programm viel mehr 
wenn ich ein großes array mache und für jede datei die in ordner1 bzw in einem unterordner von ordner1 oder einem unterodner von unterordner usw. ist den kompletten pfad aufschreibe das gleiche mit dem backupverzeichniss mache, dann würde es doch auch gehen, richtig?

also bräuchte ich code, der alles was in z.b C:\WINNT ist auflistet und in ein array schreibt.

würde es sehr lange dauern, bis alles gelistet ist? für ~1gb daten mit durchschnittlich 5mb?
ich denke mal auf alle fälle schneller als 1 gb zu kopieren!


----------



## Shakie (17. Oktober 2004)

Ich würde dir das FileSystemObjekt aus der *Microsoft Scripting Runtime* empfehlen. Damit lassen siche viele Datei- und Verzeichnisoperationen bequem erledigen.


```
Private Sub VerzeichnisDurchgehen(ByVal Pfad As String)
    Dim fso As Scripting.FileSystemObject
    Set fso = New Scripting.FileSystemObject
    Dim Verzeichnis As Scripting.Folder
    Dim UnterVerzeichnis As Scripting.Folder
    Dim Datei As Scripting.File
    
    Set Verzeichnis = fso.GetFolder(Pfad)
    
    For Each Datei In Verzeichnis.Files
        'Hier jetzt irgendwas mit der Datei machen, z.B. vergleichen:
        'Zum Testen lasse ich hier einfach mal den Dateipfad im Debug-Fenster ausgeben:
        Debug.Print Datei.Path
    Next
    
    For Each UnterVerzeichnis In Verzeichnis.SubFolders
        VerzeichnisDurchgehen UnterVerzeichnis.Path
    Next
    
End Sub

Private Sub Form_Load()
    VerzeichnisDurchgehen "C:\WINNT"
End Sub
```


----------



## hazzan (18. Oktober 2004)

Recht herzlichen Dank euch beiden, ist ein echt super Forum hier!
Damit kann ich jetzt endlich ein schickes Programm schreiben. 

gregor


----------

