因为业务需要,要实时频繁的监控并写XML文件。发现有的时候XML会被清空。
经过测试,使用xmldocment进行load和save时,xml文件经常会是0K,这时候关掉程序就会出现XML被清空的问题。
极端测试情况如下:
private void UpdateXml()
{
while (true)
{
try
{
XmlDocument xml = new XmlDocument();
xml.Load(Application.StartupPath + "\\config.xml");
xml.Save(Application.StartupPath + "\\config.xml");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
请教各位,是什么原因,该怎么解决?谢谢。
------解决思路----------------------
你可以static在内存里面,然后timer定时去保存为文件
------解决思路----------------------
while(true)

------解决思路----------------------
没等保存完,就马上要读取了,其实被破坏了
------解决思路----------------------
这个Save里面会用Create方式打开文件,这时文件就被设置为0字节了,要一直到写完成,最终 Flush 到磁盘才是真正保存成功。在这个过程中如果程序崩溃、强行结束、死机、断电等等情况都可能导致文件清空。
用非 append 的方式频繁改写文件本就不是一个好选择,可以的话优先考虑使用别的方式。如果坚持使用这种方式,想文件不被清空只有一种办法,就是自行实现原子写入,Visual Studio 保存文件的时候就是使用这个办法,它可以保证要不然写入成功,要不然保持原样(丢弃发生错误时未完全写入的数据)。