1

分離ストレージの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);
    }
}

私がここで欠けているものは何ですか?

4

2 に答える 2

1

同じファイルの読み取りと書き込みはお勧めできません。XML は正しく構築されていますが、正しく記述されていません。

動作するはずの 1 つの方法は、ファイルを別の場所 (たとえば ) に書き込み、元のusingのAPI を"lampe_tmp.xml"閉じて削除し、次に API を使用してにコピーすることです。"lampe.xml"IsolatedStorageFileDeleteFile"lampe_tmp.xml""lampe.xml"MoveFile

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");
于 2012-05-05T11:43:24.367 に答える
0

読み取り元と同じストリームに書き込みます。書き始めるとファイル位置がファイルの最後になるので、ファイルに追記します。

書き込む前にストリームの位置をリセットするか、ストリームを閉じて新しいストリームを開いて書き込みます。

于 2012-05-05T11:34:23.840 に答える