如何保存/加载进度?

时间:2011-09-26 02:23:12

标签: c# .net dictionary

假设我有一个程序,比方说 - 一个字典,用户更新,更改和类似的东西。现在,我想将该字典保存在一个文件中,所以在下次他运行该程序时,他可以继续他停止的地方。

什么是正确的方法/如何实现这一目标?

谢谢。

3 个答案:

答案 0 :(得分:4)

一个选项可能是将Dictionary对象本身序列化为文件,可以是自定义格式,XML,也可以是二进制表示,然后在加载应用程序时对其进行反序列化,但这会导致多个用户崩溃。

持久化数据的最常用方法之一是在数据库中。

道歉,如果这个答案含糊不清,但解决方案实际上取决于您的应用程序的需求。也许一个简单的文本文件就足够了,或者你可能需要更强大的东西,比如数据库。

有几个免费的数据库选项:SQL Server ExpressMySQLPostgreSQLSQLite仅举几例。

答案 1 :(得分:3)

我只是序列化字典,因为这就是应用程序正在使用的内容。

假设您在此处使用Dictionary<string, string>序列化方法:

var entries = 
    dictionary
        .Select(kvp =>
            new XElement(
                "entry",
                new XAttribute("key", kvp.Key),
                new XAttribute("value", kvp.Value)));


var xd = new XDocument(new XElement("dictionary", entries));

xd.Save(@"C:\filename.xml");

然后将其从磁盘上恢复:

var dictionary =
    XDocument
        .Load(@"C:\filename.xml")
        .Root
        .Elements("entry")
        .ToDictionary(
            x => x.Attribute("key").Value,
            x => x.Attribute("value").Value);

很简单,是吗?

答案 2 :(得分:2)

因此,字典可能是一个非常大的东西,并将其全部加载到内存中可能不是答案。我可能会利用某种数据库来保存它 - sqlite或类似的东西可以工作。跟踪用户在表条目中使用的最后一件事以及字典条目也是非常简单的。特别是对于字典而言,数据库解决方案很好地工作,因为它允许链接到其他条目等等。如果它具有任何可观的大小,在某些平面文件甚至XML中执行此操作可能是错误的方法。