![]() |
Sicheres Speichern
Hallo!
Ich hab ein Programm geschrieben das mit einem Timer alle paar Minuten die Daten speichert. Das hab ich extra so gemacht, dass bei einem Absturz die neuen Daten nicht verloren gehen. Jetzt ist mein PC abgestürzt und durch einen "glücklichen" Zufall ist er genau beim Speichervorgang abgestürzt und nun sind meine Daten nicht veraltet sondern komplett kaputt... Deshalb wollte ich fragen, wie ich meine Daten so speichern kann, damit sowas nicht mehr vorkommt. Ich hab mir überlegt ich könnte die neue Datei unter einem anderen Namen speichern, dann die alte Datei löschen und die neue Datei umbenennen. Ist das sinnvoll, oder gibts da vielleicht noch eine bessere Möglichkeit? Was mich aber auch interessieren würde ist: Wie kann das überhaupt passieren? Das wundert mich echt. 1) Wie groß ist die Wahrscheinlichkeit dass der PC genau während dem Speichern abstürzt??? [Edit]Ca. 1:3000. Nicht mal so klein, das Speichern dauert anscheinend ziemlich lange...[/Edit] 2) Ich dachte NTFS hat Mechanismen (Journaling?) die sowas verhindern... Grüße Blablab |
AW: Sicheres Speichern
Ich würde es so machen:
1) evtl. vorhandene <dateiname>.bak löschen (wenn 2) vorhanden) 2) momentane Datendatei in <dateiname>.bak umbenennen 3) Daten in <dateiname>.<ext> schreiben So sollte zumindest mit ziemlich hoher Wahrscheinlichkeit immer eine *.bak Kopie existieren. Wenn es ganz wichtig ist, kann man hinterher auch noch eine Art verify drüber laufen lassen. |
AW: Sicheres Speichern
Wenn es immer die gleiche Datei ist und der Nutzer keinen Dateinamen bestimmen kann/muss (also zum Beispiel einfach eine programminterne Information) so kann man auch eine Datei nehmen in der man 2 Stände hält. Der Aufbau sieht dann in etwa wie folgt aus
- aktiver Speicherstandindex (-1, 0 oder 1) - Speicherstand1 - Speicherstand2 Beim speichern wird zuerst geschaut welches der aktuelle Speicherstand ist. Entsprechend wird der neue Stand dann auf den anderen Speicherstand geschrieben. Erst wenn dies erfolgreich geschehen ist wird die Information, welcher Speicherstand der aktive(neueste) ist geändert. |
AW: Sicheres Speichern
Zitat:
damit kenne ich mich auch nicht näher aus, habe aber gefunden: A Change Journal can be disabled on a given volume, preventing the system from logging file and directory changes. By default, an NTFS volume will have its Change Journal disabled. Some application must explicitly activate the journal. Also note that any application can activate or disable the volume's journal at any time. Hört sich für mich nicht nach einer besonders sinnvollen Einrichtung an, aber so sprach Microsoft. Gruss Reinhard |
AW: Sicheres Speichern
Du könntest dir mal
![]() |
AW: Sicheres Speichern
ich würde das so machen:
1. aktuelle Daten in die Datei <Name>.tmp speichern 2. alte Daten von <Name>.dat nach <Name>.bak umbenennen 3. aktuelle Datei von <Name>.tmp nach <Name>.dat umbenennen 4. Datei <Name>.bak löschen |
AW: Sicheres Speichern
Es kommt darauf an wie viel Sicherheit Du brauchst.
Im Zweifel würde ich Generationen anlegen also etwa so etwas:
Code:
hinterher kann man die Dateien löschen deren Inhalt mehrfach vorhanden ist.
Datei.ext.G001
Datei.ext.G002 Datei.Ext.G003 usw. Was den Absturz Deines Rechners angeht, wenn er nicht an einer USV hängt,dann reicht manchmal eine Störung im Stromnetz und es knallt. Gruß K-H |
AW: Sicheres Speichern
Vielen Dank für die vielen Antworten!
@NamenLozer Ich hab auch gelesen dass es erst ab Vista geht und ich hab "leider" kein Vista, sondern XP. @p80286 So hatte ich es sogar schonmal, allerdings gab das irgendwann ein Chaos als ich dann über 100 Dateien hatte (weil ich automatisch alle paar Minuten speichere). Und wenn man nicht sofort mitbekommt, dass die Daten falsch sind musste man alle Dateien durchgehen und versuchen rauszufinden, welches die letzte gültige Datei ist. Und das ist teilweise nichtmal so leicht. @SirThornberry Das ist auch ne gute Idee. Leider sind aber meine Dateien unterschiedlich groß und dann erfüllt das nicht mehr so ganz seinen Zweck. @Reinhard Kern Ich glaub ich hab da was verwechselt. Wenn ich das jetzt richtig verstanden habe dann ist das "normale" Journaling nur für Operationen auf dem Dateisystem zuständig und nicht für das Schreiben von Daten in einer Datei. Dass es dafür extra noch ein Change Jounaling gibt habe ich nicht gewusst. @Rest Dann bleibt mir im Prinzip ja nurnoch die Idee mit den 2 Dateien. So werd ichs dann auch machen. Wie genau ich die jetzt benenne und in welcher Reihenfolge ich das mache überleg ich mir noch, aber das ist ja jetzt nicht so entscheidend... Nochmal Danke! Grüße Blablab [OT]@Satty67 Du lernst weil du beim Lernen mehr lernst als du später wieder vergisst :P[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz