AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sicheres Speichern

Ein Thema von blablab · begonnen am 17. Sep 2010 · letzter Beitrag vom 18. Sep 2010
Antwort Antwort
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#1

Sicheres Speichern

  Alt 17. Sep 2010, 11:32
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

Geändert von blablab (17. Sep 2010 um 11:36 Uhr)
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Sicheres Speichern

  Alt 17. Sep 2010, 11:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Sicheres Speichern

  Alt 17. Sep 2010, 14:04
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

AW: Sicheres Speichern

  Alt 17. Sep 2010, 14:47
2) Ich dachte NTFS hat Mechanismen (Journaling?) die sowas verhindern...
Hallo,

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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Sicheres Speichern

  Alt 17. Sep 2010, 15:44
Du könntest dir mal Transactions unter NTFS anschauen. Ist jedoch afaik erst ab Vista verfügbar.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Sicheres Speichern

  Alt 17. Sep 2010, 16:25
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Sicheres Speichern

  Alt 17. Sep 2010, 16:45
Es kommt darauf an wie viel Sicherheit Du brauchst.
Im Zweifel würde ich Generationen anlegen also etwa so etwas:
Code:
Datei.ext.G001
Datei.ext.G002
Datei.Ext.G003

usw.
hinterher kann man die Dateien löschen deren Inhalt mehrfach vorhanden ist.

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Sicheres Speichern

  Alt 18. Sep 2010, 13:37
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 [/OT]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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