【发布时间】:2013-01-08 14:15:45
【问题描述】:
我将 C# 与 .NET 4.0 一起使用,并且我正在尝试调试我的应用程序的一个罕见问题,有时程序会使用我的 .xml 文件读取和写入配置设置,并将写入一个空白 XML 文件。
问题是我无法在详尽尝试后重新创建它,所以我想我可能会确保不存在内置XmlDocument.Save() 功能可能导致空白文件的已知情况。
修改 XML 文件的唯一方法是使用内置的 XmlNode.AppendChild() 和 XmlNode.ReplaceChild() 在内存中,因此我预计问题发生在其中一个函数中或使用 XmlDocument.Save() 函数写入磁盘时。
【问题讨论】:
-
可能是未刷新或未处理的流?
-
@SteveB 你能解释一下吗?
-
你没有显示代码,所以这只是一个猜测。稍微解释一下,根据您保存 xml 数据的方式,您可以拥有一些流(FileStream、MemoryStream 等)。 .Net 内部(可能还有底层的 Win32 API,我实际上不知道)正在缓冲写操作。如果由于某种原因缓冲区操作失败,则生成的文档可能已损坏。当您将文本编写器(或类似的)嵌套在流上时,您也可能遇到某些情况。如果在“刷新”写入器之前关闭目标流,则不能保证所有数据都已写入。
-
为避免这些情况,请务必在处理完这些对象后调用 .Dispose()。为了简化代码,不要犹豫,使用非常有用的
using语句。 -
我认为没有使用流,我使用的是
.Save("Filename")覆盖,而不是我将其传递给流的那个。