2010-06-08 10 views
8

फ़ाइल करने के लिए XmlDocument को क्रमबद्ध करने का प्रयास कर रहा है। XmlDocument बल्कि बड़ा है; हालांकि, डीबगर में मैं देख सकता हूं कि इनरएक्सएमएल संपत्ति में सभी एक्सएमएल ब्लॉब हैं - इसे वहां छोटा नहीं किया गया है।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 की तरह लाइन के लिए बाहर लिखते हैं उत्पादन किया है - यह वास्तव में एक टैग के बीच में छोटा कर दिया है!

किसी के पास कोई विचार है कि यह यहां क्यों छेड़छाड़ करेगा?

अद्यतन: मैं इस मुद्दे के स्रोत मिल गया। मैं फ़ाइल स्ट्रीम बंद करने से पहले एक्सएमएल टेक्स्ट राइटर बंद नहीं कर रहा था! डी 'ओह!

उत्तर

7

XmlTextWriter ठीक से बंद नहीं किया गया। ओह!

+0

द्वारा जाने के लिए एक सरल नियम: "यदि यह डिस्पोजेबल है, तो किसी को कहीं इसका निपटान करना होगा" (धाराओं पर 'निपटान करें' और लेखक फ्लश और बंद हो जाएंगे)। –

4

आप बंद करने से पहले स्ट्रीम को फ्लश करने का प्रयास कर सकते हैं। यदि AutoFlush सच है, मुझे लगता है कि यह बंद() वैसे भी पर प्लावित हो जाता है, लेकिन इसके लायक एक शॉट हो सकता है:

// 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

हे पॉल, सुझाव के लिए धन्यवाद। मैंने वास्तव में इसके बारे में सोचा था (क्षमा करें, इसे मूल पोस्ट में कहा जाना चाहिए था) लेकिन मुझे एक ही परिणाम मिला। इसी प्रकार, मैंने एन्कोडिंग को स्विच करने का प्रयास किया, यह सोचने के लिए कि यह किसी भी प्रकार का मुद्दा हो सकता है, इसका कोई फायदा नहीं हुआ। कोई अन्य विचार? –

1

मूल प्रश्न पूछने के बाद यह तरीका है ... लेकिन यह Google परिणामों पर दिखाई दिया।

मैं आज इसी तरह से कुछ चला गया और मेरा जवाब साझा करना चाहता था (अगली दुर्भाग्यपूर्ण आत्मा के लिए जो इस भ्रम का सामना कर रहे हैं)।

मैं स्मृति में डेटा रखने के लिए एक मेमोरीस्ट्रीम (एमएस) के साथ स्ट्रीमवाइटर (एसएस) का उपयोग कर रहा हूं और फिर कुछ अंतराल पर एक फाइलस्ट्रीम (एफएस) में फ्लश कर रहा हूं।

तो मैं

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

और कर रहा था तो बाद सभी ने कहा था और किया

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

समस्या यह है कि मैं MemoryStream पहला

फेरबदल करने के लिए StreamWriter निस्तब्धता नहीं किया गया था इसने मेरे मुद्दे को हल किया। जब मैं इसे नीचे के रूप में बदल गया

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

समस्या का समाधान हो गया था:

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

मैं इस मुद्दे को आज सामना करना पड़ा जब कोड के रूप में नीचे था

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

आशा इस किसी के लिए उपयोगी है ।

संबंधित मुद्दे