Inkrementelles Backup mit PureZip ?!
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Inkrementelles Backup mit PureZip ?!
Hallo Leute...
Ich bastel gerade an einem automatischen Backup, welches Dateien von vier Rechnern sammeln soll und diese
auf einem Server in ein angegebenes Verzeichnis packen soll. Dabei ist es wichtig, das bereits vorhandene
Dateien innerhalb des Archives nicht überschrieben werden. Mit der PureZip-Library komme ich soweit
eigentlich ganz gut klar, nur kann man hiermit anscheinend keine inkrementellen Backups machen.
Auch in der Hilfedatei von PureZip finde ich leider nichts, was mir weiterhelfen würde.
Hat jemand einen Tipp für mich, ich würde auch eine andere Lib nehmen... wäre für jede Hilfe dankbar!
Ich bastel gerade an einem automatischen Backup, welches Dateien von vier Rechnern sammeln soll und diese
auf einem Server in ein angegebenes Verzeichnis packen soll. Dabei ist es wichtig, das bereits vorhandene
Dateien innerhalb des Archives nicht überschrieben werden. Mit der PureZip-Library komme ich soweit
eigentlich ganz gut klar, nur kann man hiermit anscheinend keine inkrementellen Backups machen.
Auch in der Hilfedatei von PureZip finde ich leider nichts, was mir weiterhelfen würde.
Hat jemand einen Tipp für mich, ich würde auch eine andere Lib nehmen... wäre für jede Hilfe dankbar!
Re: Inkrementelles Backup mit PureZip ?!
PureZIP doesn't have any specific function for backups.Ghosty1967 hat geschrieben:Hallo Leute...
Ich bastel gerade an einem automatischen Backup, welches Dateien von vier Rechnern sammeln soll und diese
auf einem Server in ein angegebenes Verzeichnis packen soll. Dabei ist es wichtig, das bereits vorhandene
Dateien innerhalb des Archives nicht überschrieben werden. Mit der PureZip-Library komme ich soweit
eigentlich ganz gut klar, nur kann man hiermit anscheinend keine inkrementellen Backups machen.
Auch in der Hilfedatei von PureZip finde ich leider nichts, was mir weiterhelfen würde.
Hat jemand einen Tipp für mich, ich würde auch eine andere Lib nehmen... wäre für jede Hilfe dankbar!
But, if you add the same file to an archive twice or more, the previous copy will not be erased : there will be several copies with the same filename in the archive [file date and file crc may be different].
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Yeh, thats what i see if i add same files to a archive... Can you tell me, how to check, if the file already exists in an archive.PureZIP doesn't have any specific function for backups.
But, if you add the same file to an archive twice or more, the previous copy will not be erased : there will be several copies with the same filename in the archive [file date and file crc may be different].
I think, thats the way to realize an incremental backup?!
I used the code-example in the help file and i dont know, how to edit it to check for existing files!
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Ja, aber ich muß ja innerhalb des Archives prüfen, ob die Datei schon existiert...Du kannst anhand der Original-Dateigröße und der CRC32 überprüfen, ob die
evtl. vorhandene Datei geändert worden ist.
Im Moment arbeite ich einfach mit
Code: Alles auswählen
zipFiles.s="C:\pstand\calstand\calwert\*.cal"
zipArchive.s="O:\Sales and Aftersales\LABORRECHNER\Daten\Kalibrierscheine.zip"
PureZIP_AddFiles(zipArchiv, zipFiles, #PureZIP_StorePathRelative, #PureZIP_Recursive)
- PureZIP_Archive_Create
- PureZIP_AddFile
usw. arbeiten möchte um einzelne Dateien an ein bestehendes Archiv zu hängen und
vorher zu überprüfen, ob die Datei bereits vorhanden ist ???
bzw. Wie kann ich den Inhalt von "zipFiles.s" feststellen und auslesen ???
PureZIP_AddFiles() ist sicherlich die für den Programmierer bequemste Art
und Weise, Dateien einem ZIP-File hinzuzufügen. Für Dein Vorhaben solltest
Du allerdings PureZIP_Archive_Create() in Verbindung mit
PureZIP_Archive_Compress() verwenden. Hierbei hast Du eine bessere
Kontrolle darüber, welche Dateien Du einem Archiv hinzufügst und welche
nicht.
Parallel dazu musst Du dann auch PureZIP_GetFileInfo() verwenden, um
Informationen über die bereits im ZIP vorhandenen Dateien zu erhalten.
Hierbei sind für Dich relevant:
1.) Ist die Datei schon im ZIP vorhanden? Wenn nicht -> Datei hinzufügen
2.) Ist die Dateilänge gleich? -> Wenn nicht -> Datei hinzufügen
3.) Ist die CRC32 gleich? -> Wenn nicht -> Datei hinzufügen
Grüße ... Kiffi
und Weise, Dateien einem ZIP-File hinzuzufügen. Für Dein Vorhaben solltest
Du allerdings PureZIP_Archive_Create() in Verbindung mit
PureZIP_Archive_Compress() verwenden. Hierbei hast Du eine bessere
Kontrolle darüber, welche Dateien Du einem Archiv hinzufügst und welche
nicht.
Parallel dazu musst Du dann auch PureZIP_GetFileInfo() verwenden, um
Informationen über die bereits im ZIP vorhandenen Dateien zu erhalten.
Hierbei sind für Dich relevant:
1.) Ist die Datei schon im ZIP vorhanden? Wenn nicht -> Datei hinzufügen
2.) Ist die Dateilänge gleich? -> Wenn nicht -> Datei hinzufügen
3.) Ist die CRC32 gleich? -> Wenn nicht -> Datei hinzufügen
Grüße ... Kiffi
a²+b²=mc²
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Könntest Du mir da ein Programmbeispiel posten, ich habe schon diverse Sachen versucht, komme aber nicht weiter.Für Dein Vorhaben solltest
Du allerdings PureZIP_Archive_Create() in Verbindung mit
PureZIP_Archive_Compress() verwenden. Hierbei hast Du eine bessere
Kontrolle darüber, welche Dateien Du einem Archiv hinzufügst und welche
nicht.
Parallel dazu musst Du dann auch PureZIP_GetFileInfo() verwenden, um
Informationen über die bereits im ZIP vorhandenen Dateien zu erhalten.
Hierbei sind für Dich relevant:
1.) Ist die Datei schon im ZIP vorhanden? Wenn nicht -> Datei hinzufügen
2.) Ist die Dateilänge gleich? -> Wenn nicht -> Datei hinzufügen
3.) Ist die CRC32 gleich? -> Wenn nicht -> Datei hinzufügen
In meinem Programm, durchsuche ich als erstes das zu packende Stammverz. rekursiv und
speichere die gefundenen Dateien in einer Liste. Diese Dateien könnte ich ja dann einzeln zum Archiv
hinzufügen und vorher im Archiv nachschauen, ob sie schon vorhanden sind.
Aber ich weiss absolut nicht wie.
Ich stehe hier wie der "Ochs vorm Berg!"

Wenn Du mir helfen könntest, wäre ich sehr dankbar!
sorry, kann ich momentan nicht so mal eben aus dem Ärmel schüttelnGhosty1967 hat geschrieben:Könntest Du mir da ein Programmbeispiel posten, ich habe schon diverse
Sachen versucht, komme aber nicht weiter.

Du hast also die zu zippenden Dateien in einer Liste gespeichert. Diese
Liste durchläufst Du nun Datei für Datei (ForEach ... Next oder For ... Next).
Anhand des Dateinamens kannst Du nun den Zeiger innerhalb des bereits
vorhandenen ZIPs auf den aktuellen Eintrag setzen:
Code: Alles auswählen
PureZIP_Archive_Locate(FileName.s)
Informationen auslesen, welche in der Structure PureZIP_FileInfo
vorliegen.
Das ist in der Online-Hilfe eigentlich ziemlich gut dokumentiert.
Grüße ... Kiffi
a²+b²=mc²
Simply parse the archive using PureZIP_FindFirst()/PureZIP_FindNext(), getting the file information with PureZIP_Archive_FileInfo().Ghosty1967 hat geschrieben:Yeh, thats what i see if i add same files to a archive... Can you tell me, how to check, if the file already exists in an archive.
I think, thats the way to realize an incremental backup?!
I used the code-example in the help file and i dont know, how to edit it to check for existing files!
Code: Alles auswählen
myFileinfo.PureZIP_FileInfo
If PureZIP_Archive_Read(MyZIP.s)
ReturnValue.l = PureZIP_Archive_FindFirst() = #UNZ_OK
While ReturnValue = #UNZ_OK
Debug PureZIP_Archive_FileInfo(@myFileinfo)
Debug "Filename: " + myFileinfo\FileName
Debug "Compressed Size: " + Str(myFileinfo\CompressedSize)
Debug "Uncompressed Size: "+ Str(myFileinfo\unCompressedSize)
; etc ...
ReturnValue = PureZIP_Archive_FindNext()
Wend
PureZIP_Archive_Close()
EndIf
For free libraries and tools, visit my web site (also home of jaPBe V3 and PureFORM).
- Thorsten1867
- Beiträge: 1360
- Registriert: 04.02.2005 15:40
- Computerausstattung: [Windows 10 x64] [PB V5.7x]
- Wohnort: Kaufbeuren
- Kontaktdaten:
Code: Alles auswählen
Structure ZipInfoStructure
Name.s
date.l
Size.l
EndStructure
Global NewList ZipFiles.ZipInfoStructure()
Procedure ExamineZip(ZipFile.s)
myFileinfo.PureZIP_FileInfo
If PureZIP_Archive_Read(ZipFile)
ReturnValue.l = PureZIP_Archive_FindFirst()
While ReturnValue = #UNZ_OK
PureZIP_Archive_FileInfo(@myFileinfo)
AddElement(ZipFiles())
ZipFiles()\Name = myFileinfo\FileName
ZipFiles()\date = Date(myFileinfo\tmu_date\tm_year, myFileinfo\tmu_date\tm_mon + 1, myFileinfo\tmu_date\tm_mday, myFileinfo\tmu_date\tm_hour, myFileinfo\tmu_date\tm_min, myFileinfo\tmu_date\tm_sec)
ZipFiles()\Size = myFileinfo\unCompressedSize
ReturnValue = PureZIP_Archive_FindNext()
Wend
PureZIP_Archive_Close()
EndIf
EndProcedure
Code: Alles auswählen
Structure FilesStructure
Name.s
date.l
Size.l
update.b
EndStructure
Global NewList SrcFiles.FilesStructure()
ProcedureDLL.s GetSubDirFilePart(thFile.s, thPath.s) ; Relative path of file
If Right(thPath, 1) <> "\" : thPath + "\" : EndIf
If FindString(thFile, thPath, 1) = 1
ProcedureReturn RemoveString(thFile, thPath)
Else
ProcedureReturn thFile
EndIf
EndProcedure
Procedure ExamineSrcDir(directory.s, ScrDir.s)
UsedDirectory = ExamineDirectory(#PB_Any, directory,"*.*")
If UsedDirectory
While NextDirectoryEntry(UsedDirectory)
EntryType.l = DirectoryEntryType(UsedDirectory)
entryname.s = DirectoryEntryName(UsedDirectory)
If entryname = "." Or entryname = ".." : Continue : EndIf
Select EntryType
Case 1 ; Datei
AddElement(SrcFiles())
file$ = directory + entryname
SrcFiles()\Name = GetSubDirFilePart(file$, ScrDir)
SrcFiles()\date = DirectoryEntryDate(UsedDirectory, #PB_Date_Modified)
SrcFiles()\Size = DirectoryEntrySize(UsedDirectory)
SrcFiles()\update = #True
Case 2
ExamineSrcDir(directory+entryname+"\", ScrDir)
EndSelect
Wend
FinishDirectory(UsedDirectory)
EndIf
EndProcedure