Как сохранить / загрузить прогресс? - PullRequest
1 голос
/ 26 сентября 2011

Предположим, у меня есть программа, скажем, словарь, который пользователь обновляет, меняет и тому подобное.Теперь я хочу сохранить этот словарь в файле, так что в следующий раз, когда он запустит программу, он сможет продолжить там, где остановился.

Как правильно / как бы вы этого достигли?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Одним из вариантов может быть сериализация самого объекта «Словарь» в файл в произвольном формате, XML или просто в двоичном представлении, а затем десериализация его при загрузке приложения, но это не работает с несколькими пользователями.

Одним из наиболее распространенных подходов к сохранению данных является база данных.

Извините, если этот ответ неопределенный, но решение действительно зависит от потребностей вашего приложения. Возможно, достаточно простого текстового файла или вам нужно что-то более надежное, например, база данных.

Существует несколько бесплатных опций базы данных: SQL Server Express , MySQL , PostgreSQL , SQLite и многие другие. .

3 голосов
/ 26 сентября 2011

Я бы просто сериализовал словарь, так как это то, что приложение использует.

Предполагая, что у вас есть 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 голосов
/ 26 сентября 2011

Таким образом, словарь может быть довольно большой вещью, и загрузка всего этого в память, вероятно, не является ответом.Я бы, вероятно, использовал какую-то БД для ее хранения - sqlite или что-то подобное сработало бы.Было бы довольно просто отследить последнее, что пользователь использовал в записи таблицы, а также в словарных записях.В частности, для словаря решение БД работает хорошо, поскольку оно допускает такие вещи, как ссылки на другие записи и т. Д. Выполнение этого в каком-то плоском файле или даже в XML, вероятно, является неправильным подходом, если оно имеет какой-либо заметный размер.

...