Ok, entonces para explicar; Estoy desarrollando para un sistema que puede sufrir un corte de energía en cualquier momento, un punto que estoy probando es inmediatamente después de haber escrito un archivo usando StreamWriter. El código de abajo:Power Loss después de que StreamWriter.Close() produzca un archivo en blanco, ¿por qué?
// 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);
escribe el contenido de shellConfigWriter
(un List
de cuerdas) en un archivo utilizado como un almacén temporal, entonces se copia sobre el original. Ahora, después de que este código haya terminado de ejecutarse, se pierde la alimentación, al volver a iniciarse, aparece el archivo Game.cfg
y tiene el tamaño correcto, pero está completamente vacío. Al principio, pensé que esto se debía a que Write-Caching estaba habilitado en el disco duro, pero incluso con eso, aún ocurre (aunque con menos frecuencia).
¡Cualquier idea sería bienvenida!
Actualización: Ok, así que después de la eliminación de las declaraciones .Close()
y llamando .Flush()
después de cada operación de escritura los archivos aún terminan en blanco. Podría ir un paso más allá y crear primero una copia de seguridad del archivo original, antes de crear el nuevo, y luego tengo suficientes copias de seguridad para hacer una verificación de integridad, pero no creo que ayude a resolver el problema subyacente (que cuando le digo que escriba, enjuague y cierre un archivo ... ¡No lo hace!).
es 'Game.cfg.bak' en blanco así? –
Sí, ambos están en blanco. :( – Siyfion
C# tiene un búfer, el sistema operativo tiene un búfer o dos y su disco físico tiene un búfer. Creo que solo puede influir en los dos primeros desde C#. Siempre perderá algunos datos en una situación de pérdida de potencia, el la pregunta es cuánto. – Pod