Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XML文件中保存收藏夹_C#_Xml - Fatal编程技术网

C# 在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

因为我不想使用数据库来保存这些信息,所以我尝试将用户收藏夹保存到Xml文件中,稍后再加载它们

目前我正在使用此代码,但这将完全覆盖以前的Xml文件,而不是添加到其中:

//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读取器设置为片段。