将XML写入文件而不覆盖以前的数据

Joh*_*ton 4 .net c# xml file-io

我目前有一个C#程序,它使用.NET Framework将数据写入XML文件.

if (textBox1.Text!="" && textBox2.Text != "")
{
    XmlTextWriter Writer = new XmlTextWriter(textXMLFile.Text, null);
    Writer.WriteStartDocument();
    Writer.WriteStartElement("contact");
    Writer.WriteStartElement("firstName");
    Writer.WriteString(textBox1.Text);
    Writer.WriteEndElement();

    Writer.WriteEndElement();
    Writer.WriteEndDocument();
    Writer.Close();
}
else
{
    MessageBox.Show("Nope, fill that textfield!");
}
Run Code Online (Sandbox Code Playgroud)

问题是我每次尝试保存新内容时都会覆盖我的XML文件.

我有两个nullEncoding.UTF8第二个参数,XmlTextWriter但它似乎没有改变非重写/覆盖功能.

Dar*_*rov 6

您可以使用XDocument:

public static void Append(string filename, string firstName)
{
    var contact = new XElement("contact", new XElement("firstName", firstName));
    var doc = new XDocument();

    if (File.Exists(filename))
    {
        doc = XDocument.Load(filename);
        doc.Element("contacts").Add(contact);
    }
    else
    {
        doc = new XDocument(new XElement("contacts", contact));
    }
    doc.Save(filename);
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用:

if (textBox1.Text != "" && textBox2.Text != "")
{
    Append(textXMLFile.Text, textBox1.Text);
}
else
{
    MessageBox.Show("Nope, fill that textfield!");
}
Run Code Online (Sandbox Code Playgroud)

这将创建/附加到以下XML结构的联系人:

<?xml version="1.0" encoding="utf-8"?>
<contacts>
  <contact>
    <firstName>Foo</firstName>
  </contact>
  <contact>
    <firstName>Bar</firstName>
  </contact>
</contacts>
Run Code Online (Sandbox Code Playgroud)


Ste*_*ary 5

将数据添加到XML文件的唯一方法是将其读入,添加数据,然后再次写出完整的文件.

如果您不想将整个文件读入内存,则可以使用流接口(例如XmlReader/ XmlWriter)来交错读取,追加和写入.