C# 在XML文件中保存收藏夹
因为我不想使用数据库来保存这些信息,所以我尝试将用户收藏夹保存到Xml文件中,稍后再加载它们 目前我正在使用此代码,但这将完全覆盖以前的Xml文件,而不是添加到其中:C# 在XML文件中保存收藏夹,c#,xml,C#,Xml,因为我不想使用数据库来保存这些信息,所以我尝试将用户收藏夹保存到Xml文件中,稍后再加载它们 目前我正在使用此代码,但这将完全覆盖以前的Xml文件,而不是添加到其中: //Creates new filestream with create and write permissions FileStream fs = new FileStream("Favo.Xml", FileMode.Create, FileAccess.Write); //Calls SavoFace.cs SaveFavo
//Creates new filestream with create and write permissions
FileStream fs = new FileStream("Favo.Xml", FileMode.Create, FileAccess.Write);
//Calls SavoFace.cs
SaveFavo sf = new SaveFavo();
//Fills public string Name with tbname.text
sf.Name = tbName.Text;
lvFavo.Items.Add(tbName.Text);
//Adds name to the list
ls.Add(sf);
//Serializes the filestream and the list
xs.Serialize(fs, ls);
//Closes the file
fs.Close();
(这段代码来自youtube视频,因为我以前从未处理过Xml文件,但是我似乎找不到这个特定问题的答案。)
我如何向Xml文件中添加内容,而不是完全覆盖它
提前感谢您的回答。这是一个基于您的代码的工作示例
class Program
{
static void Main(string[] args)
{
List<SaveFavo> ls = new List<SaveFavo>();
bool bExists = File.Exists("Favo.Xml");
XmlSerializer xs = new XmlSerializer(typeof(List<SaveFavo>));
if (!bExists)
{
//creates file if file doesn't exist
using (FileStream fs = File.Create("Favo.Xml"))
{
AddFavo(ls, "Test1");
xs.Serialize(fs, ls);
//Closes the file
fs.Close();
}
}
else
{
var fs = File.Open("Favo.Xml", FileMode.OpenOrCreate);
//reads existing file and deserialize into list<SaveFavo>
ls = xs.Deserialize(fs) as List<SaveFavo>;
fs.Close();
}
//test sample
for (int i = 2; i < 10; i++)
using (FileStream fs = File.OpenWrite("Favo.Xml"))
//add new content and saves file
{
AddFavo(ls, $"Test{i}");
xs.Serialize(fs, ls);
fs.Close();
}
}
private static void AddFavo(List<SaveFavo> ls, string favo)
{
SaveFavo sf = new SaveFavo();
//Fills public string Name with tbname.text
sf.Name = favo;
//Adds name to the list
ls.Add(sf);
}
}
public class SaveFavo
{
public string Name { get; set; }
public SaveFavo() { }
}
类程序
{
静态void Main(字符串[]参数)
{
列表ls=新列表();
bool bExists=File.Exists(“Favo.Xml”);
XmlSerializer xs=新的XmlSerializer(typeof(List));
如果(!bExists)
{
//如果文件不存在,则创建文件
使用(FileStream fs=File.Create(“Favo.Xml”))
{
AddFavo(ls,“测试1”);
序列化(fs,ls);
//关闭文件
fs.Close();
}
}
其他的
{
var fs=File.Open(“Favo.Xml”,FileMode.OpenOrCreate);
//读取现有文件并反序列化到列表中
ls=xs。反序列化(fs)为列表;
fs.Close();
}
//试样
对于(int i=2;i<10;i++)
使用(FileStream fs=File.OpenWrite(“Favo.Xml”))
//添加新内容并保存文件
{
AddFavo(ls,$“Test{i}”);
序列化(fs,ls);
fs.Close();
}
}
私有静态void AddFavo(列表ls,字符串favo)
{
SaveFavo sf=新的SaveFavo();
//用tbname.text填充公共字符串名称
sf.Name=favo;
//将名称添加到列表中
ls.Add(sf);
}
}
公共类SaveFavo
{
公共字符串名称{get;set;}
公共SaveFavo(){}
}
检查此项您明确使用的是
FileMode.Create
,您是否阅读了说明?您的解决方案有多个xml标识行,无法读取。附加必须删除id行,然后在根级别上有多个元素,这是一个格式不正确的xml。因此,在读取时,需要将xml读取器设置为片段。