Seite 1 von 2

Daten Backup Programm

Verfasst: 14.04.2008 14:15
von Joel
Hallo,

Vor einer Woche habe ich mir wieder was neues in den Kopf gesetzt, was ich unbedingt programmieren will :D

Ich habe ein Programm geschrieben das meine Wichtigsten Daten sichert:

Code: Alles auswählen

time.SYSTEMTIME 

GetLocalTime_(@time) 

Jahr = time\wYear 

Monat = time\wMonth 

Tag = time\wDay 

Datum$= Str(Tag)+"."+Str(Monat)+"."+Str(Jahr)

Debug Datum$

Debug CreateDirectory("K:\Sicherungen\"+Datum$)

Debug CreateDirectory("K:\Sicherungen\"+Datum$+"\Joel")

Debug CreateDirectory("K:\Sicherungen\"+Datum$+"\Joel\Eigene Dateien")

Debug CreateDirectory("K:\Sicherungen\"+Datum$+"\Joel\Desktop")

Debug CreateDirectory("K:\Sicherungen\"+Datum$+"\Joel\Favoriten")

Debug CreateDirectory("K:\Sicherungen\"+Datum$+"\Backups")





Debug CopyDirectory("C:\Dokumente und Einstellungen\Joel\Eigene Dateien", "K:\Sicherungen\"+Datum$+"\Joel\Eigene Dateien", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)

Debug CopyDirectory("C:\Dokumente und Einstellungen\Joel\Desktop", "K:\Sicherungen\"+Datum$+"\Joel\Desktop", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)

Debug CopyDirectory("C:\Dokumente und Einstellungen\Joel\Favoriten", "K:\Sicherungen\"+Datum$+"\Joel\Favoriten", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)

Debug CopyDirectory("G:\Bachups", "K:\Sicherungen\"+Datum$+"\Backups", "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
Das Programm Speicher die Daten auf meiner Externen Festplatte und Speichert sie in einem Ordner der nach dem Aktuellen Datum benannt ist.

Ziel:Ich möchte das Programm so machen das es die Dateien in einem Ordner speichert, wenn ich das Programm nun ein zweites mal aufrufe soll es nur die Dateien in dem Backup Ordner speichern die neu Angelegt wurden oder geändert wurden, habt ihr eine Idee wie das geht???

Das kann man bestimmt irgentwie über die Änderungsdatum machen oder???

Verfasst: 14.04.2008 14:29
von milan1612
Schau dir mal GetFileDate() in der Hilfe an :wink:

Verfasst: 14.04.2008 14:35
von Scarabol
Hi,

vielleicht solltest du die Daten auch mit MD5FileFingerprint checken, dann kannst du zwar nicht nach Datum entscheiden, aber siehst ob sich die Datei geändert hat, im Gegensatz zum alten Backup...

Gruß
Scarabol

Verfasst: 14.04.2008 15:12
von Joel
OK, Thx

Habe schonmal was Programmiert:

Code: Alles auswählen

Datei$ = "C:\Dokumente und Einstellungen\Joel\Eigene Dateien\1.txt"
x = GetFileDate("C:\1.txt", #PB_Date_Modified)
Text$ = FormatDate("%yyyy:%mm:%dd:%hh:%ii:%ss", x)
Debug Text$
Jetzt habe ich aber noch ein paar Fragen:

1.Wie sage ich dem Programm das es z.B. in dem Ordner "Eigene Dateien" und in allen Unterordnern alle Datein nacheinander als "Datei$" auswählt?

2. Wenn das Programm z.B. in: "C:\Dokumente und Einstellungen\Joel\Eigene Dateien\Test\Joel\1.txt" die Datei als Geändert findet, muss es ja wissen das die Datei 1. In Eigene Dateien liegt 2.Dass sie in einem bestimmten Unterornder liegt 3.Wie die Datei heißt, damit es auf der Externen Festplatte die Unterordner öffnen kann und die Datei vergleichen kann.

Verfasst: 14.04.2008 15:55
von Scarabol
Hi,

zu 1.
http://www.purebasic.fr/german/viewtopi ... highlight=

zu 2.
Ich denke mal das du auf Festplatte und Externer Platte die gleiche OrdnerStruktur hast. Daher brauchst du nur die Dateipfade vergleichen...

Gruß
Scarabol

Verfasst: 14.04.2008 16:41
von Joel
Danke!!!!!!!


Mit GetFileDate() kann ich aber nur die Änderungsdaten einer Datei herausfinden, kann ich auch das Änderungsdatum eines Ordners Herausfinden???

Verfasst: 14.04.2008 16:58
von NicTheQuick
Es gibt kein Änderungsdatum bei Ordnern. Nur das Erstellungsdatum und das
ist für deine Zwecke wohl unnötig. Wenn der Ordner vorher nicht da war, ist
er neu, sonst hat sich höchstens sein Inhalt geändert.

Klick dich mal im Explorer zu den Eigenschaften eines Ordners. Dann siehst
du, was ich meine.

Verfasst: 14.04.2008 17:54
von Joel
Ok, Vielen Dank!!!

Ich habe das Programm jetzt so programmiert, dass es wenn es in einer Datei Änderungen findet, hat die Datei Kopiert und Ordner immer Kopiert!

Habt ihr eine Idee wie man das so einstellen kann, dass dass Programm auch den Inhalt in den Unterordnern Mitbewertet und nachher die Ornder auch Anlegt???

Ich Poste mal den Code, vielleicht wisst ihr wie das gehen soll!!!

PS: Ich wäre auch Dankbar wenn einer den Code Vielleicht mal ein Bisschen anders schreiben könnte also vielleicht den Code etwas Einfacher schreibt, vielleicht sieht der dann auch Ordentlicher aus!!!

Code: Alles auswählen

Global Datei$
Procedure.s ListDirectory(directory$, level.l=0, pattern$="*.*") 
  Protected dir$, d.l, t$ 
  d = ExamineDirectory(#PB_Any, directory$, pattern$) 
  While NextDirectoryEntry(d) 
    If DirectoryEntryType(d) = #PB_DirectoryEntry_Directory 
      If Not (DirectoryEntryName(d) = "." Or DirectoryEntryName(d) = "..") 
        dir$ + DirectoryEntryName(d)+"\" + Chr(10) 
        If level > 0 
          t$ = ListDirectory(directory$+DirectoryEntryName(d)+"\", level-1) 
          If t$ 
            dir$ + t$ 
          EndIf 
        EndIf 
      EndIf 
    ElseIf DirectoryEntryType(d) = #PB_DirectoryEntry_File 
      dir$ + DirectoryEntryName(d) + Chr(10) 
    EndIf 
  Wend 
  ProcedureReturn dir$ 
EndProcedure 

; ********************************************************************** 
; 
; ListDirectory() - Example 

EnableExplicit 

Define d$ 
Define c.l 
Define Pfad$
Define x.l
Define Datum$
Define PfadE$
Define exe$
Define exDatum$ 
Define exx


d$ = ListDirectory("C:\Dokumente und Einstellungen\Joel\Eigene Dateien") 

For c = 1 To CountString(d$, Chr(10))+1 
 Datei$ = StringField(d$, c, Chr(10)) 
 Pfad$ = "C:\Dokumente und Einstellungen\Joel\Eigene Dateien\"+Datei$
 PfadE$ = "Eigene Dateien\"+Datei$
 Debug Pfad$
 x = GetFileDate(Pfad$, #PB_Date_Modified)
 Datum$ = FormatDate("%yyyy:%mm:%dd:%hh:%ii:%ss", x)
Debug Datum$


exe$ = "C:\Sicherungen\1\Joel\"+PfadE$
exx = GetFileDate(exe$, #PB_Date_Modified)
 exDatum$ = FormatDate("%yyyy:%mm:%dd:%hh:%ii:%ss", exx)
Debug exDatum$

If Datum$ = "1970:01:01:00:00:00"
DeleteDirectory(exe$, "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
CopyDirectory(Pfad$, exe$, "*.*", #PB_FileSystem_Recursive | #PB_FileSystem_Force)
Goto Ende_1
EndIf 

If Datum$ = exDatum$
Goto Ende_1 
EndIf 
CopyFile(Pfad$, exe$)

Ende_1:

Next 

Verfasst: 14.04.2008 18:38
von Scarabol
Nunja du könntest bei ListDirectory einen Level angeben bis wo die Unterordner durchsucht werden, 999 dürfte da wohl alle sein...

Kann aber auch entsprechend dauern...

Gruß
Scarabol

Verfasst: 14.04.2008 18:45
von Joel
Ja gute Idee!!!

Ich weiß nur nicht wie ich den Level Programmieren soll also auch in dem Zusammenhang etc.

Könnte einer von euch mal einen Beispielcode oder sowas Posten wenn das geht?