Ok, więc wyjaśnić; Pracuję dla systemu, który może znieść awarię zasilania w dowolnym momencie, jeden punkt, który testuję jest bezpośrednio po tym, jak napisałem plik za pomocą StreamWriter. Poniższy kod:Strata mocy po StreamWriter.Close() generuje pusty plik, dlaczego?
// 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);
Zapisuje zawartość shellConfigWriter
(a List
ciągów) do pliku używany jako tymczasowy sklep, to jest skopiowane z oryginałem. Po zakończeniu wykonywania tego kodu zasilanie zostanie utracone, po ponownym uruchomieniu ponownie plik Game.cfg
istnieje i ma prawidłowy rozmiar, ale jest całkowicie pusty. Na początku pomyślałem, że jest to spowodowane włączeniem Write-Caching na dysku twardym, ale nawet po jej wyłączeniu nadal występuje (choć rzadziej).
Wszelkie pomysły byłyby bardzo mile widziane!
Aktualizacja: Ok, więc po usunięciu sprawozdania .Close()
i nazywając .Flush()
po każdej operacji zapisu plików nadal kończy się pusty. Mogę pójść o krok dalej i najpierw utworzyć kopię zapasową oryginalnego pliku, przed utworzeniem nowego, a następnie mam wystarczającą ilość kopii zapasowych, aby wykonać test integralności, ale nie sądzę, że pomoże to rozwiązać podstawowy problem (że kiedy każę mu pisać, opróżniać i zamykać plik ... To nie działa!).
jest 'Game.cfg.bak' puste, jak również? –
Tak, oba są puste. :( – Siyfion
C# ma bufor, system operacyjny ma bufor lub dwa i twój dysk fizyczny ma bufor.Myślę, że możesz wpływać tylko na pierwsze dwa z C#. Zawsze będziesz tracić dane w sytuacji utraty zasilania, Pytanie brzmi: jak bardzo – Pod