XmlDocument.WriteTo截断结果文件

时间:2010-06-08 22:55:51

标签: c# xml filestream xmldocument xmltextwriter

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

以下是将我的XmlDocument对象写入file:

的代码
// 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 Text Writer! D'哦!

4 个答案:

答案 0 :(得分:7)

XmlTextWriter未正确关闭。 Woops!

答案 1 :(得分:4)

您可以尝试在关闭前刷新流。如果AutoFlush为true,我认为无论如何它都会在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(); 

答案 2 :(得分:1)

这是方式...在提出原始问题之后,但它出现在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()

答案 3 :(得分: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);
}

希望这对某人有用。