Daten Backup Programm

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

Daten Backup Programm

Beitrag 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???
Zuletzt geändert von Joel am 14.04.2008 16:02, insgesamt 1-mal geändert.
----------------------------------------------------------

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Beitrag von milan1612 »

Schau dir mal GetFileDate() in der Hilfe an :wink:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

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

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

Danke!!!!!!!


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

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 »

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

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

PB 5.20 Beta 10 | Windows 7
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

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

PB 5.20 Beta 10 | Windows 7
Antworten