1

我正在尝试将 Element 添加到 IsolatedStorage 中的 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构造正确,只是编写不正确。

一种可行的方法是将文件写入不同的位置(例如),使用的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 回答