【问题标题】:XmlDocument.WriteTo truncates resultant fileXmlDocument.WriteTo 截断结果文件
【发布时间】:2011-03-01 10:12:23
【问题描述】:

尝试将 XmlDocument 序列化为文件。 XmlDocument 相当大;但是,在调试器中,我可以看到 InnerXml 属性中包含所有 XML blob - 它没有被截断。

以下是将我的 XmlDocument 对象写入文件的代码:

// Write that string to a file.
var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write);
xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented});
fileStream.Close();

这里生成的文件只写到像 5,760 这样的行——它实际上在标签中间被截断了!

有人知道为什么这里会被截断吗?

更新:我找到了问题的根源。在关闭文件流之前我没有关闭 XML 文本编写器!哦!

【问题讨论】:

    标签: c# xml filestream xmldocument xmltextwriter


    【解决方案1】:

    XmlTextWriter 未正确关闭。哎呀!

    【讨论】:

    • 一个简单的规则:“如果它是一次性的,就必须有人在某个地方处理它”(Dispose 在流上,作者将刷新并关闭)。
    【解决方案2】:

    您可以尝试在关闭之前刷新流。如果 AutoFlush 为真,我认为无论如何它都会在 Close() 上刷新,但它可能值得一试:

    // Write that string to a file. 
    var fileStream = new FileStream("AdditionalData.xml", FileMode.OpenOrCreate, FileAccess.Write); 
    xmlDocument.WriteTo(new XmlTextWriter(fileStream, Encoding.UTF8) {Formatting = Formatting.Indented}); 
    fileStream.Flush();
    fileStream.Close(); 
    

    【讨论】:

    • 嗨,保罗,感谢您的建议。我实际上已经想到了这一点(对不起,应该在原始帖子中指出这一点)但我得到了相同的结果。同样,我尝试切换编码,认为这可能是某种问题,但无济于事。还有其他想法吗?
    【解决方案3】:

    这是方式方式方式方式...在提出原始问题后,但它显示在 Google 结果中。

    我今天经历了类似的事情,并想分享我的答案(为下一个面临这种困惑的不幸灵魂)。

    我正在使用带有 MemoryStream (ms) 的 StreamWriter (sw) 将数据保存在内存中,然后以特定间隔刷新到文件流 (fs)。

    所以我在做

        sw.WriteLine(DateTime.Now.ToString("u").Replace("Z", "") & ":  " & entry)
    

    说到底

        ms.WriteTo(fs)
        fs.Flush()
        fs.Close()
        ms.Close()
    

    问题是我没有先将 StreamWriter 刷新到 MemoryStream

    对此进行更改解决了我的问题。

        sw.Flush()
        ms.WriteTo(fs)
        fs.Flush()
        fs.Close()
        ms.Close()
    

    【讨论】:

      【解决方案4】:

      我今天遇到了这个问题,代码如下:

      XmlTextWriter writer = new XmlTextWriter("IdP.xml", null);
      writer.Formatting = Formatting.Indented;
      xmlElement.WriteTo(writer);
      

      当我将其更改如下时,问题已得到解决:

      using (XmlTextWriter writer = new XmlTextWriter("IdP.xml", null))
      {
          writer.Formatting = Formatting.Indented;
          xmlElement.WriteTo(writer);
      }
      

      希望这对某人有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多