2010-06-08 92 views
8

嘗試將XmlDocument序列化爲文件。 XmlDocument相當大;然而,在調試器中,我可以看到InnerXml屬性中包含了所有的XML blob - 它不會在那裏被截斷。XmlDocument.WriteTo截斷結果文件

下面的代碼寫入我的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(); 

這是這裏生產的只有寫出像5760行的文件 - 它在標籤的中間居然截斷!

任何人有任何想法,爲什麼這將截斷在這裏?

更新:我發現問題的根源。在關閉文件流之前,我沒有關閉XML文本編輯器! D'哦!

回答

7

的XmlTextWriter中沒有正確關閉。 Woops!

+0

一個簡單的規則是:「如果它是一次性的,某個地方有人需要處置它」(對流和作家進行「處置」將會刷新和關閉)。 – 2010-07-05 23:33:33

4

您可以嘗試在關閉之前刷新流。如果自動沖洗是真實的,我認爲它就會在關閉()反正通紅,但也可能是值得一試:

// 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(); 
+0

嘿保羅,謝謝你的建議。我其實已經想到了這一點(對不起,應該在原帖中提及),但我得到了同樣的結果。同樣,我嘗試切換編碼,認爲它可能是某種問題,但無濟於事。 有沒有其他想法? – 2010-06-09 16:16:09

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

希望這是有用的人。