当前位置: 代码迷 >> C# >> winform频繁读写XML文件有关问题
  详细解决方案

winform频繁读写XML文件有关问题

热度:492   发布时间:2016-04-28 08:36:40.0
winform频繁读写XML文件问题
因为业务需要,要实时频繁的监控并写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 保存文件的时候就是使用这个办法,它可以保证要不然写入成功,要不然保持原样(丢弃发生错误时未完全写入的数据)。
  相关解决方案