8

试图将 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 文本编写器!哦!

4

4 回答 4

7

XmlTextWriter 未正确关闭。哎呀!

于 2010-07-05T23:10:15.170 回答
4

您可以尝试在关闭之前刷新流。如果 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(); 
于 2010-06-08T23:39:07.610 回答
1

这是方式方式方式......在提出原始问题之后,但它出现在谷歌结果中。

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

我正在使用带有 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()
于 2012-03-21T22:48:27.113 回答
1

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

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);
}

希望这对某人有用。

于 2014-08-04T11:01:48.247 回答