【问题标题】:What could cause a blank XML file?什么可能导致空白 XML 文件?
【发布时间】: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") 覆盖,而不是我将其传递给流的那个。

标签: .net xml .net-4.0


【解决方案1】:

我找到了this 线程。 特别是倒数第二个答案可能值得一试。引用:

似乎可行的解决方法是替换:

doc.Save("c:\temp\Output.xml")

IO.File.WriteAllText("c:\temp\Output.xml", doc.OuterXml);

【讨论】:

  • 这行不通。它只会将“System.Xml.XmlDocument”字符串保存到文件中。
  • 这看起来很有希望,我将尝试再次复制该错误,如果可以,我将尝试此修复以查看它是否有效。
  • 我尝试了此修复,但错误仍在发生,此解决方案不起作用。 :(
  • 它对我有用!但为什么?区别在哪里?
【解决方案2】:

我理解正确,您正在加载空白 xml 文件并添加配置设置并将其保存回来。

如果是这种情况,您可能想检查该 xml 文件的写入权限,有时如果您没有权限,它不会将任何内容写入文件。

希望对你有帮助。

【讨论】:

  • 不,.xml 文件从一开始就不是空白的,很抱歉造成混淆。
【解决方案3】:

我遇到了类似的问题。 我有

var infoTableWriter = new XmlTextWriter(saveFileDialog.FileName, new UTF8Encoding(false));
xmlInfoTableDoc.Save(infoTableWriter);

没有关闭 writer,所以它保存了一个 Empty (0 bytes) 文件

var infoTableWriter = new XmlTextWriter(saveFileDialog.FileName, new UTF8Encoding(false));
xmlInfoTableDoc.Save(infoTableWriter);
infoTableWriter.Close();

工作正常。我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多