2010-02-25 12 views
6

Tek bir XmlDocument nesnesini bir sınıfta tutmak ve yöntemlerin bunlarda değişiklik yapmasını ve kaydetmesini sağlamak istiyorum.XmlDocument :: Save(), dosyadaki xml'yi ekler

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

Yukarıdaki kod, dosyanın içindeki xml yapısının iki kopyasını oluşturur.

+0

Neden:

Bir eşdeğer

fs.Seek(0, SeekOrigin.Begin); 
Alternatif

yerine aynı filestream kullanarak olurdu FileStream'i kullanırken Yük için dosya yolunu belirleyebilir mi? Ben * düşünüyorum * dosya erişimi için varsayılan davranış, belirttiğiniz şeydir. – Dave

+0

XML dosyası, okuyan (yazmayan) farklı modüller arasında paylaşılır. Bu modülde yazmak/okumak ve yazmak için kilitlemek istiyorum. – A9S6

cevap

3

kaydet çağrısı

+0

Tamam. Bu işe yaradı ... Teşekkürler – A9S6

+0

Neden bu yapılmalı? –

+0

@ IanR.O'Brien Bunun nedeni, dosyayı yüklemek için aynı filestriği kullanmasıdır (bu nedenle, yükün sonunda dosya sonundadır. Fakat yapmak istediğiniz şey, daha önce neyin içinde olduğunu kesmektir. XML'i yazmadan önce akış –

2

Ekleme:

fs.Position = 0; 

kaydet aramadan önce.

+0

Bunu denedim ama çok tuhaf bir davranışı var. Bazı veriler üzerine yazılır ve tüm dosya artık geçerli bir XML dosyası değildir. – A9S6

0

O fs.Position en Foole gelen çözüm işe yaramadı garip biraz görünüyor önce

fs.SetLength(0); 

deneyin. Alternatif

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

Özgün XML dosyası 1000 karakter uzunluğundaysa ve xmldocument değerini değiştirdikten sonra yalnızca 600 karakter kaldıysa, sonuçta 400 karakter kalıyor demektir. silinen alamadım XML dosyası. Dolayısıyla neden doğrulama hata örn orijinal Eğer XmlDocument değiştirmek 210 Eğer > Bildirimi ile sona erecek sonunda –

+0

Sağ de ">" gereksiz !! @ LnDCobra'nın yorumu için not – A9S6

0

bile bu işe yarar ...

 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

Peki, bu işe yarayabilir ama sanırım sadece sıfır uzunluğunu ayarlamak ve Kaydet – A9S6

+0

çağırmak için çok daha verimli olacaktır Bu işe yaramaz çünkü dosya o zaman kullanacağım dosyayı asla kaydetme .. –

İlgili konular