Daten Backup Programm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag 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
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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:
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Super, Viele Dank!!!! :allright:
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag 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???
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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?
Antworten