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
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
- Thomas Koller (18.05.2009 13:37)
- Heiko Nocon (18.05.2009 18:38)
- Edzard Egberts (18.05.2009 19:28)
- Heiko Nocon (18.05.2009 20:56)
- Edzard Egberts (22.05.2009 12:04)
