尝试将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'哦!
答案 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);
}
希望这对某人有用。