我有以下代码,它成功写入XML文件。但是,由于正在进行tagRegistry.Save()调用,它每次都会覆盖。如何在现有文件中添加新的XElement?目前文件只是被覆盖。
public void saveTag()
{
if (File.Exists("/tagRegistry.xml"))
{
XElement tagRegistry = XElement.Load("/tagRegistry.xml");
XElement newTag = new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude));
tagRegistry.Add(newTag);
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
tagRegistry.Save(stream);
}
}
}
else
{
XDocument tagRegistry = new XDocument(new XElement("SmartSafe"));
tagRegistry.Element("SmartSafe").Add(new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude)));
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
tagRegistry.Save(stream);
}
}
}
}
答案 0 :(得分:12)
试试这个:
public void saveTag()
{
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
XDocument document;
XElement tagRegistry = null;
if (storage.FileExists("/tagRegistry.xml"))
{
using(var stream = storage.OpenFile("/tagRegistry.xml", FileMode.Open))
{
document = XDocument.Load(stream);
}
tagRegistry = document.Descendants("SmartSafe").FirstOrDefault();
}
else
{
document = new XDocument();
}
if(tagRegistry == null)
{
tagRegistry = new XElement("SmartSafe");
document.Add(tagRegistry);
}
XElement newTag = new XElement("Tag",
new XElement("tag", stringUid),
new XElement("name", desiredName),
new XElement("latitude", latitude),
new XElement("longitude", longitude));
tagRegistry.Add(newTag);
using (Stream stream = storage.CreateFile("/tagRegistry.xml"))
{
document.Save(stream);
}
}
}
答案 1 :(得分:2)
您的File.Exists
电话可能是错误的。您将文件存储到独立存储,但从当前运行目录读入。所以你总是落入else
块并且每次都写一个新文件。