nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Problem beim Speichern von Dateien

Von: Edzard Egberts (ed_08@tantec.de) [Profil]
Datum: 18.05.2009 12:48
Message-ID: <guredd$o66$01$1@news.t-online.com>
Newsgroup: de.comp.os.ms-windows.programmer
Hallo,

ich habe hier einen Fehler beim Abspeichern von Dateien (unter Windows
XP) gefunden, bei dem mir absolut nicht klar ist, wie so etwas passieren
kann:
Abgespeichert wird ein STL-Container über eine for-Schleife, wobei der
Inhalt datensatzweise auf einen std::fstream geschrieben wird. Weil ich
mich schon seit Jahren damit herumärgere, dass Windows beim Speichern
Daten verliert, werden von den Dateien ständig Backups angelegt, die
auch mit einer Prüfsumme versehen sind. Ich habe also drei Versionen,
eine von 15:40 Uhr, die in Ordnung ist (CRC-Prüfsumme okay), eine von
15:47 Uhr, die ab 0x80000 nur noch mit Nullen beschrieben ist und eine
von 16:18, die nur noch Nullen enthält, alle drei Dateien haben aber die
gleiche Größe von 869 kB.

Für mich sieht das so aus, als wäre die Software störungsfrei weiter
gelaufen, nur das Speichern hat plötzlich nicht mehr funktioniert. Dass
der Container kaputt gegangen ist, kann ich eigentlich ausschließen,
weil in der dritten Datei noch nicht einmal die statischen
Header-Informationen vorhanden sind und alle Dateien die gleiche Größe
haben - die Daten sind scheinbar beim Schreiben "genullt" worden.
Außerdem wird nach dem Schreiben der Stream-Status geprüft und die
Software steigt mit einer Fehlermeldung aus, wenn beim Schreiben einer
Systemdatei ein Fehler erkannt wird (!good()), das ist aber nicht passiert.

Weil die Backups nur noch Nullen enthielten, war der Kunde genau eine
Sicherungsdatei vom totalen Datenverlust entfernt - so etwas macht mich
krank! Kann man sich denn wirklich gar nicht auf Windows verlassen, so
dass meine Software nach jedem Abspeichern noch einmal die gesamte Datei
zurücklesen und prüfen muss? Meiner Meinung nach darf so ein Fehler
keinesfalls auftreten, oder müsste zumindestens vom Betriebssystem
gemeldet werden. Ich verstehe auch gar nicht, wo genau so ein Fehler
auftreten kann - gepufferter Schreibzugriff, der erst nachträglichen
schief geht, so dass die Software das nicht mehr bemerkt? Aber beim
close() erfolgt doch ein flush(), oder muss da etwas beachtet werden?

Auslösendes Moment für diesen Fehler waren möglicherweise
Stromschwankungen, weil der Regen eine Laterne unter Wasser gesetzt hat
und ähnliche Fehler kenne ich auch, wenn der PC plötzlich einen
Stromausfall hat. Aber in so einem Fall würde ich doch eigentlich eine
abgeschnittene Datei erwarten und nicht, dass der weiterarbeitet und
Müll abspeichert.

Irgendwelche Ideen, was da los war?

Ed

[ Auf dieses Posting antworten ]

Antworten