Ok, so zu erklären; Ich entwickle für ein System, das zu irgendeinem Zeitpunkt einen Stromausfall erleiden kann, ein Punkt, den ich gerade teste, ist direkt nachdem ich eine Datei mit einem StreamWriter geschrieben habe. Der folgende Code:Stromausfall nach StreamWriter.Close() erzeugt leere Datei, warum?
// Write the updated file back out to the Shell directory.
using (StreamWriter shellConfigWriter =
new StreamWriter(@"D:\xxx\Shell\Config\Game.cfg.bak"))
{
for (int i = 0; i < configContents.Count; i++)
{
shellConfigWriter.WriteLine(configContents[i]);
}
shellConfigWriter.Close();
}
FileInfo gameCfgBackup = new FileInfo(@"D:\xxx\Shell\Config\Game.cfg.bak");
gameCfgBackup.CopyTo(@"D:\xxx\Shell\Config\Game.cfg", true);
Schreibt den Inhalt von shellConfigWriter
(a List
von Strings) in eine Datei als Zwischenspeicher verwendet wird, dann wird es über das Original kopiert. Jetzt, nachdem dieser Code ausgeführt wurde, geht der Strom verloren, beim erneuten Start der Datei existiert die Datei Game.cfg
und hat die richtige Größe, ist aber komplett leer. Zuerst dachte ich, dass dies daran liegt, dass Write-Caching auf der Festplatte aktiviert ist, aber selbst wenn es ausgeschaltet ist, tritt es immer noch auf (wenn auch nicht so oft).
Alle Ideen wären sehr willkommen!
Update: Ok, so dass nach den .Close()
Aussagen zu entfernen und riefen .Flush()
nach jedem Schreibvorgang beenden die Dateien noch leer nach oben. Ich könnte noch einen Schritt weiter gehen und zuerst eine Sicherungskopie der Originaldatei erstellen, bevor ich die neue erstellen würde, und dann habe ich genügend Sicherungskopien, um eine Integritätsprüfung durchzuführen, aber ich denke nicht, dass sie helfen wird, das zugrunde liegende Problem zu lösen (wenn ich es schreibe, speichere und schließe eine Datei ... tut es nicht!).
Ist 'Game.cfg.bak' leer als auch? –
Ja, sie sind beide leer. :( – Siyfion
C# hat einen Puffer, das Betriebssystem hat einen Puffer oder zwei und Ihre physische Festplatte hat einen Puffer. Ich denke, Sie können nur die ersten beiden von C# beeinflussen. Sie verlieren immer einige Daten in einer Stromausfall Situation, die Frage ist, wie viel. – Pod