将两个列表保存到文件中,然后加载c#

将两个列表保存到文件中,然后加载c#,c#,C#,在我的“DiaryManager”类中,我得到了两个具有两种不同类型(T)的列表,我想将其保存到文件中,然后我想加载它。 我把它和我的一个列表一起使用,我将向你们展示 我在工作代码中保存和加载的列表名为“m_日记”。保存方法如下所示: /// <summary> /// Saves the object information /// </summary> public void Save() { // Gain c

在我的“DiaryManager”类中,我得到了两个具有两种不同类型(T)的列表,我想将其保存到文件中,然后我想加载它。 我把它和我的一个列表一起使用,我将向你们展示

我在工作代码中保存和加载的列表名为“m_日记”。保存方法如下所示:

    /// <summary>
    /// Saves the object information
    /// </summary>
    public void Save()
    {
        // Gain code access to the file that we are going
        // to write to
        try
        {
            // Create a FileStream that will write data to file.
            FileStream writerFileStream =
                new FileStream(DATA_FILENAME, FileMode.Create, FileAccess.Write);
            // Save our dictionary of friends to file
            m_formatter.Serialize(writerFileStream, m_diary);

            // Close the writerFileStream when we are done.
            writerFileStream.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }
    /// <summary>
    /// Load the object to the program 
    /// </summary>
    public void Load()
    {

        // Check if we had previously Save information of our friends
        // previously
        if (File.Exists(DATA_FILENAME))
        {

            try
            {
                // Create a FileStream will gain read access to the
                // data file.
                FileStream readerFileStream = new FileStream(DATA_FILENAME,
                    FileMode.Open, FileAccess.Read);
                // Reconstruct information of our friends from file.
                m_diary = (List<Diary>)                    
                    m_formatter.Deserialize(readerFileStream);
                // Close the readerFileStream when we are done
                readerFileStream.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            } 

        } 

    }
这段代码在我的windows窗体类中非常有效。 但现在Iv又增加了一个不同类型的列表

如何将第二个列表保存并加载到??)

致意
Cyrix

您应该创建一个包含所有要保存的数据(列表)的类。然后将该类保存到文件。

您应该创建一个包含所有要保存的数据(列表)的类。然后将该类保存到文件中。

您可以使用第二个列表中类似的代码来完成此操作,也可以编写一个:

publicstaticvoidsave(字符串文件名,列表)
{
//获取我们要访问的文件的代码访问权限
//写信
尝试
{
//创建一个将数据写入文件的文件流。
使用(var stream=newfilestream(文件名,FileMode.Create,FileAccess.Write))
{
var formatter=新的二进制格式化程序();
序列化(流、列表);
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
以及加载方法:

   public static List<T> Load<T>(string fileName)
    {
        var list = new List<T>();
        // Check if we had previously Save information of our friends
        // previously
        if (File.Exists(fileName))
        {

            try
            {
                // Create a FileStream will gain read access to the
                // data file.
                using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    var formatter = new BinaryFormatter();
                    list = (List<T>)
                        formatter.Deserialize(stream);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
        return list;
    }
公共静态列表加载(字符串文件名)
{
var list=新列表();
//检查我们以前是否保存过朋友的信息
//以前
if(File.Exists(fileName))
{
尝试
{
//创建文件流将获得对
//数据文件。
使用(var stream=newfilestream(文件名,FileMode.Open,FileAccess.Read))
{
var formatter=新的二进制格式化程序();
列表=(列表)
格式化程序。反序列化(流);
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
退货清单;
}
负载的使用:

        var list = new List<string> {"one", "two", "three"};
        Save("first.dat", list);

        var list2 = Load<string>("first.dat");
        foreach (var VARIABLE in list2)
        {
            Console.WriteLine(VARIABLE);
        }
var list=新列表{“一”、“二”、“三”};
保存(“first.dat”,列表);
var list2=负荷(“第一个数据”);
foreach(列表2中的var变量)
{
控制台写入线(变量);
}

还要看处理

您可以在第二个列表中使用类似的代码,也可以编写:

publicstaticvoidsave(字符串文件名,列表)
{
//获取我们要访问的文件的代码访问权限
//写信
尝试
{
//创建一个将数据写入文件的文件流。
使用(var stream=newfilestream(文件名,FileMode.Create,FileAccess.Write))
{
var formatter=新的二进制格式化程序();
序列化(流、列表);
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
以及加载方法:

   public static List<T> Load<T>(string fileName)
    {
        var list = new List<T>();
        // Check if we had previously Save information of our friends
        // previously
        if (File.Exists(fileName))
        {

            try
            {
                // Create a FileStream will gain read access to the
                // data file.
                using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    var formatter = new BinaryFormatter();
                    list = (List<T>)
                        formatter.Deserialize(stream);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
        return list;
    }
公共静态列表加载(字符串文件名)
{
var list=新列表();
//检查我们以前是否保存过朋友的信息
//以前
if(File.Exists(fileName))
{
尝试
{
//创建文件流将获得对
//数据文件。
使用(var stream=newfilestream(文件名,FileMode.Open,FileAccess.Read))
{
var formatter=新的二进制格式化程序();
列表=(列表)
格式化程序。反序列化(流);
}
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
退货清单;
}
负载的使用:

        var list = new List<string> {"one", "two", "three"};
        Save("first.dat", list);

        var list2 = Load<string>("first.dat");
        foreach (var VARIABLE in list2)
        {
            Console.WriteLine(VARIABLE);
        }
var list=新列表{“一”、“二”、“三”};
保存(“first.dat”,列表);
var list2=负荷(“第一个数据”);
foreach(列表2中的var变量)
{
控制台写入线(变量);
}

还要看处理

几乎没有选择-将两个列表放入类中并序列化该类;将每个列表保存到不同的文件中;手动执行序列化|反序列化-在与当前问题相关的Litsun之间使用某种分隔符,但一定要查看与
FileStream
对象相关的;将每个列表保存到不同的文件中;手动执行序列化|反序列化-在与当前问题相关的Litsun之间使用某种分隔符,但请查看与
FileStream
对象相关的。