Seite 2 von 2
Verfasst: 14.04.2008 18:48
von Joel
Edit: Hab ne bessere Ideee, man könnte doch einfach die Ordnergröße nehmen also wenn sich die Größe geändert hat dann wird der Ordner nochmal Kopiert und sonst nicht.
Wie macht man dass???

Verfasst: 14.04.2008 18:50
von NicTheQuick
Du kannst auch alles in eine Procedure packen:
Code: Alles auswählen
Procedure Backup(Source.s, Dest.s)
Protected Dir.l, entry.s, i.l, max.l
;Wenn das Quellverzeichnis nicht existiert
If FileSize(Source) = -1
Debug "Verzeichnis existiert nicht: '" + Source + "'"
ProcedureReturn #False
EndIf
;Wenn das Zielverzeichnis noch nicht existiert, lege es an
If FileSize(Dest) = -1
i = 1
entry = StringField(Dest, i, "\")
max = CountString(Dest, "\") + 1
While i <= max
Debug entry
If FileSize(entry) = -1
If Not CreateDirectory(entry)
Debug "Kann Verzeichnis nicht erstellen: '" + entry + "'"
ProcedureReturn #False
EndIf
EndIf
i + 1
entry + "\" + StringField(Dest, i, "\")
Wend
EndIf
If Right(Source, 1) <> "\" : Source + "\" : EndIf
If Right(Dest, 1) <> "\" : Dest + "\" : EndIf
Dir = ExamineDirectory(#PB_Any, Source, "")
If Dir
;alle Dateien und Verzeichnisse durchgehen
While NextDirectoryEntry(Dir)
entry = DirectoryEntryName(Dir)
If entry <> ".." And entry <> "."
Select DirectoryEntryType(Dir)
;Wenn es ein Verzeichnis ist
Case #PB_DirectoryEntry_Directory
;Wenn das Verzeichnis im Ziel noch nicht existiert -> anlegen und rekursiv weitermachen
If FileSize(Dest + entry) = -1
If CreateDirectory(Dest + entry)
Backup(Source + entry + "\", Dest + entry + "\")
Else
Debug "Verzeichnis konnte nicht erstellt werden: '" + Dest + entry + "'"
EndIf
;Ansonsten einfach rekursiv weitermachen
Else
Backup(Source + entry + "\", Dest + entry + "\")
EndIf
Case #PB_DirectoryEntry_File
;Wenn die Datei im Ziel noch nicht existiert -> kopieren
If FileSize(Dest + entry) = -1
If Not CopyFile(Source + entry, Dest + entry)
Debug "Datei konnte nicht kopiert werden: '" + Source + entry + "' nach '" + Dest + entry + "'"
EndIf
;Wenn sie schon existiert -> überprüfen, ob das Änderungsdatum neuer ist als das der Datei im Ziel
Else
;Wenn die Datei neuer ist -> alte löschen und neue kopieren
If DirectoryEntryDate(Dir, #PB_Date_Modified) > GetFileDate(Dest + entry, #PB_Date_Modified)
If Not DeleteFile(Dest + entry)
Debug "Datei konnte nicht gelöscht werden: '" + Dest + entry + "'"
Else
If Not CopyFile(Source + entry, Dest + entry)
Debug "Datei konnte nicht kopiert werden: '" + Source + entry + "' nach '" + Dest + entry + "'"
EndIf
EndIf
EndIf
EndIf
EndSelect
EndIf
Wend
FinishDirectory(Dir)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Backup("C:\Dokumente und Einstellungen\Joel\Eigene Dateien", "C:\Sicherungen\1\Joel")
Hab's auch ein wenig kommentiert. Ich war mir jetzt aber nicht sicher, ob
ich es auch so gemacht habe, wie du es wolltest. Probier einfach mal aus.

Verfasst: 14.04.2008 19:08
von Joel
Super, Viele Dank!!!!

Verfasst: 14.04.2008 20:51
von Joel
Jetzt habe ich aber noch eine Frage: Wie sage ich dem Programm das es jede Woche einen neuen Ordner erstellt. Also z.B. 2.12.08, das ist die 2. Woche im Dezember 2008...wie mach ich das mit den Wochen???
Verfasst: 14.04.2008 21:08
von NicTheQuick
Vielleicht so?
Code: Alles auswählen
WocheImJahr = DayOfYear(datum) / 7 + 1
WocheImMonat = Day(datum) / 7 + 1
Aber nimm doch lieber das richtige Datum anstatt die Woche im Monat. Das
wäre doch im Endeffekt übersichtlicher, oder?