2010-02-25 13 views
6

जोड़ता है मैं कक्षा में एक एक्सएमएल डॉक्यूमेंट ऑब्जेक्ट रखना चाहता हूं और विधियों को इसमें बदलाव करने और इसे सहेजने देता हूं।एक्सएमएल डॉक्यूमेंट :: सेव() फ़ाइल में xml को

using (FileStream fs = new FileStream(@"D:\Diary.xml", 
      FileMode.Open, FileAccess.ReadWrite, FileShare.Read)) 
    { 
         XmlDocument xmlDoc = new XmlDocument(); 
         xmlDoc.Load(fs); 

         .... make some changes here 

         xmlDoc.Save(fs); 
    } 

उपरोक्त कोड फ़ाइल के अंदर xml संरचना की दो प्रतियां बनाता है।

+0

क्यों कर रहे हैं:

एक बराबर

fs.Seek(0, SeekOrigin.Begin); 

वैकल्पिक रूप से

के बजाय एक ही filestream का उपयोग कर किया जाएगा जब आप फ़ाइलस्ट्रीम का उपयोग करते हैं तो आप लोड के लिए फ़ाइलपैथ निर्दिष्ट कर सकते हैं? मैं * सोचता हूं * फ़ाइल एक्सेस के लिए डिफ़ॉल्ट व्यवहार जो आपने निर्दिष्ट किया है। – Dave

+0

एक्सएमएल फ़ाइल को विभिन्न मॉड्यूल के बीच साझा किया जाता है जो इसे पढ़ते हैं (लिखते नहीं)। मैं इस मॉड्यूल में लिखने के लिए खोलना/पढ़ना और लॉक करना चाहता हूं। – A9S6

उत्तर

3

सहेजें कॉल

+0

ठीक है। यह काम किया ... धन्यवाद – A9S6

+0

ऐसा करने की आवश्यकता क्यों है? –

+0

@ IanR.O'Brien ऐसा इसलिए है क्योंकि, वह फ़ाइल लोड करने के लिए एक ही फाइलस्ट्रीम का उपयोग कर रहा है (इसलिए लोड के बाद स्थिति फ़ाइल के अंत में है। लेकिन आप जो करना चाहते हैं, वह पहले से ही क्या है एक्सएमएल को फिर से लिखने से पहले स्ट्रीम करें। –

2

जोड़ें:

fs.Position = 0; 

कॉल बचाना से पहले।

+0

मैंने कोशिश की लेकिन इसका एक बहुत ही डरावना व्यवहार है। कुछ डेटा ओवरराइट हो जाता है और पूरी फ़ाइल अब वैध XML फ़ाइल नहीं है। – A9S6

0

यह थोड़ा अजीब है कि fs.Position Foole से समाधान काम नहीं किया लगता है इससे पहले कि

fs.SetLength(0); 

की कोशिश करो।

  //OrigPath is the path you're using for the FileReader 

      System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(OrigPath); 
      xmlDoc.Save(writer); 
      writer.Close(); 
+2

यह काम नहीं करेगा, क्योंकि यदि मूल एक्सएमएल फ़ाइल 1000 वर्ण लंबी है, और xmldocument को बदलने के बाद इसमें केवल 600 वर्ण शेष हैं, तो आपको सही के अंत में 400 वर्णों के साथ छोड़ा जाएगा एक्सएमएल फ़ाइल जो हटा दिया जाता है नहीं है। इसलिए क्यों सत्यापन त्रुटि जैसे मूल आप XmlDocument करने के लिए बदल 210 आप के साथ > सूचना खत्म हो जाएगा अनावश्यक ">" अंत –

+0

अधिकार पर !! यूपी @ एलएनडीकोब्रा की टिप्पणी – A9S6

0

वैकल्पिक रूप से भी इस काम करेगा ...

 XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.Load(@"D:\Diary.xml"); 

     //.... make some changes here 
     XmlText node = xmlDoc.CreateTextNode("test"); 
     xmlDoc.DocumentElement.AppendChild(node); 

     xmlDoc.Save(@"D:\Diary.xml"); 
+0

ठीक है, यह काम कर सकता है लेकिन मुझे लगता है कि यह लंबाई को शून्य पर सेट करने के लिए और अधिक कुशल होगा और – A9S6

+0

पर कॉल करें यह काम नहीं करेगा क्योंकि उस समय फाइल का उपयोग मैं उस समय कर सकता हूं ताकि मैं ' फ़ाइल को कभी नहीं बचाओ .. –

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