2012-05-05 197 views
1

我試圖將元素添加到IsolatedStorage中的XML文件,但不是將其添加到根目錄,而是將文件複製並添加到結束:爲什麼XML元素沒有附加在文件的末尾

<?xml version="1.0" encoding="utf-8"?> 
<root> 
    <lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" /> 
    <lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" /> 
</root><?xml version="1.0" encoding="utf-8"?> 
<root> 
    <lampe id="1" nom="lampe1" content="Tables" header="Lampes de la cuisine" adresse="A1" /> 
    <lampe id="2" nom="lampe2" content="Porte et garage" header="Lampe du jardin" adresse="C3" /> 
    <child attr="1">data1</child> 
</root> 

這是我使用的代碼:

_xdoc = new XDocument(); 

using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
{ 
    using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes.xml", FileMode.Open, store)) 
    { 
     _xdoc = XDocument.Load(isoStore); 
     int nextNumber = _xdoc.Element("root").Elements("lampe").Count() + 1; 

     XElement newChild = new XElement("lampe", "data" + nextNumber); 
     newChild.Add(new XAttribute("attr", nextNumber)); 
     _xdoc.Element("root").Add(newChild); 

     _xdoc.Save(isoStore); 
    } 
} 

我缺少的是什麼?

回答

1

讀取和寫入相同的文件不是一個好主意。你的XML是構建的正確,只是寫錯了。應工作

一種方法是將文件寫入到一個不同的位置(比如"lampe_tmp.xml"),接近和使用IsolatedStorageFileDeleteFile API刪除原始"lampe.xml",然後使用MoveFile API "lampe_tmp.xml"複製到"lampe.xml"

using (IsolatedStorageFileStream isoStore = new IsolatedStorageFileStream("lampes_tmp.xml", FileMode.Open, store)) { 
    // the code from your post that modifies XML goes here... 
} 
IsolatedStorageFile.DeleteFile("lampes.xml"); 
IsolatedStorageFile.MoveFile("lampes_tmp.xml", "lampes.xml"); 
+0

我需要一些代碼,因爲我剛剛開始使用WP7 –

+0

@Wassim當然,這裏是... – dasblinkenlight

+0

沒有方法刪除()IsolatedStorageFile –

0

您正在寫入您讀取的同一個流。文件位置將在開始寫入時位於文件末尾,因此它將附加到文件。

在寫入之前重置流的位置,或關閉流並打開新的流以進行寫入。

+0

我該怎麼做?對不起,因爲我從WP7開始 –

+0

@Wassim:您已經打開了一次流,所以只需複製該代碼,並將寫入文件的代碼移動到第二部分。 – Guffa

相關問題