Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Backup von offenen/gesperrten Dateien (https://www.delphipraxis.net/73810-backup-von-offenen-gesperrten-dateien.html)

Ares 24. Jul 2006 11:23


Backup von offenen/gesperrten Dateien
 
Hallo!

Ich habe mir ein kleines Programm gebastelt, mit dem ich von verschiedenen Dateien in regelmäßigen Abständen Backups anlegen kann. Ein einfaches Backup Tool eben. Das Problem ist, dass das Programm nur Dateien sicher kann, die nicht gerade von einem anderen Programm verwendet werden und daher schon geöffnet/gesperrt sind.

Nun gibt es aber ja Image-Programme, die im laufenden Betrieb ganze Partitionen sichern. Irgendwie muss es also möglich sein auch solche Dateien zu sichern die gerade verwendet werden. Aber wie?

Ich habe hier schon ein paar Themen gefunden, die sich mit ähnlichen Problemen beschäftigen. http://www.delphipraxis.net/internal...t.php?p=575098 beschäftigt sich z.B. damit wie man ein Partitions-Image erstellt. Aber ich will ja keine ganze Partition sichern sondern nur einzelne Dateien. Genau hierzu habe ich leider nichts konkretes gefunden.

Habt ihr Tipps für mich, wie man das lösen könnte oder wo man nach Hinweisen auf eine Lösung suchen könnte?

Besten Dank!
Ares

himitsu 24. Jul 2006 12:23

Re: Backup von offenen/gesperrten Dateien
 
Im Grunde haben wir das schon erklärt.

Du müstest halt "nur" die Position der Datei auf dem Datenträger auslesen und dann über einen "direkten" Zugriff auf den Datenträger diese Stellen auslesen.

Aber da kommst du ohne Kenntnisse, wie die Partition aufgebaut ist, keinen Schritt weiter.

bei FAT z.B.:
- testen ob und was für'n FAT (FAT12, FAT16, FAT32)
- RootVereichnis suchen und von dort aus, über alle Zwischenverzeichnisse, bis zum gewünschten Verzeichnis/Datei durchhangeln
(also jeweils Eintrag in der Verzeichnisliste suhen, Position ausesen und dort hinspringen)
- dann hast'e erstmal den Clustersector
- dieser muß dann ungerechnet werden
ErstesByte := ErsterDatenCluster(StartSecrot * BytePerSector) * SectorsPerCluster * BytePerSector

Dann darfst du dich aber auch noch durch das VolumeBitmap kämpfen, wo du nachsehn muß ob und wo die restlichen Cluster für die Datei rumliegen.
Die Datei könnte ja fragmentiert sein, was bedeuten würde, daß du nicht einfach alle Bytes (Dateigröße) hintereinander auslesen kannt ...

tja das wäre so in etwa der Weg, wie es ginge bei NTFS ist es natürlich ähnlich, außer daß dort die Datenstrukturen etwas anders sind.

Luckie 24. Jul 2006 12:31

Re: Backup von offenen/gesperrten Dateien
 
Zitat:

Zitat von himitsu
Du müstest halt "nur" die Position der Datei auf dem Datenträger auslesen und dann über einen "direkten" Zugriff auf den Datenträger diese Stellen auslesen.

Und dabei beten, dass das Programm nicht gerade während des Kopiervorganges die Datei ändert. Nicht umsonst kann man eine gesperte (exklusiv geöffnete) Datei nicht kopieren.

Ares 24. Jul 2006 12:49

Re: Backup von offenen/gesperrten Dateien
 
Danke euch beiden für eure Antworten!

Es wird also nicht die Datei kopiert/gelesen sondern direkt die Cluster auf der Festplatte die zu der Datei gehören. Hierzu muss ich mich irgendwie durch das Dateisystem hangeln und herausfinden welche Cluster zu der Datei gehören. Korrekt?

Zitat:

Und dabei beten, dass das Programm nicht gerade während des Kopiervorganges die Datei ändert. Nicht umsonst kann man eine gesperte (exklusiv geöffnete) Datei nicht kopieren.
Das müsste ja eigentlich möglich sein, diverse Image-Programme schaffen es ja auch. Ein Programm, was beim Backup eines kompletten System nur "hofft", dass die Daten zwischenzeitig nicht geändert werden, wäre wahrscheinlich nicht allzugut. Deshalb muss es doch eigentlich einen Weg geben sicherzustellen, dass die Daten beim Lesen nicht geändert werden. Kann man den Zugriff auf bestimmte Cluster nicht kurzfristig exlusiv erhalten?
Bevor man anfängt die Cluster zu lesen, müsste man natürlich erst feststellen ob die Datei nicht gerade geändert wird (kann man dass?).

Thanatos81 24. Jul 2006 13:02

Re: Backup von offenen/gesperrten Dateien
 
Hmm, all diese Imaging-Tools schreiben aber auch groß und breit dabei, das während des ARbeitsprozesses kein anderes Programm ausgeführt werden sollte. Zumindest die, mit denen ich bisher gearbeitet habe, haben das so gemacht.

himitsu 24. Jul 2006 13:11

Re: Backup von offenen/gesperrten Dateien
 
Zitat:

Zitat von Thanatos81
Hmm, all diese Imaging-Tools schreiben aber auch groß und breit dabei, das während des ARbeitsprozesses kein anderes Programm ausgeführt werden sollte.

ist aber auch richtig so, denn die Daten der Platte sind ja schön verstreut, also irgendwo steht wo sich 'ne Datei befindet und die Datei selber ist wo ganz anders.

Das Auslesen dauert ja 'ne ganze Weile ... also wenn sich da was ändert (Datei wird von irgendeinem Prog bearbeitet/geändert/erstellt/gelöscht), dann könnte die Angabe in einem eingelesenen Verzeichnis nicht mit den tatsächlichen Daten übereinstimmen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz