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??? :D

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. :wink:

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

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?