2012-06-25 3 views
7

У меня довольно большое приложение на C++ (в Windows, никаких других платформ запланировано), в котором в настоящее время хранятся все настройки (даже некоторые адреса) в реестре Windows.Рекомендации по сохранению настроек

Иногда это неудобно, поскольку у пользователей возникают трудности с изменением записей в реестре. Я бы хотел, чтобы настройки были версиями, поэтому настройки всегда соответствуют текущему коду. На данный момент мы обновляем reg-файлы, но вы никогда не уверены, если все рег-файлы были добавлены на целевые машины. С помощью C# вы можете определить значения по умолчанию в app.config, но не перезаписывать существующие настройки. Я не знаю, существует ли такой механизм или библиотека для C++.

Я хотел бы иметь следующую «особенность»:

  • Настройки можно версионируется
  • Простого обновления на целевых машинах (может быть сделано пользователем)
  • Убедитесь, что обновление только новые настройки добавлены и никакие существующие настройки не будут перезаписаны значениями по умолчанию
  • Простая смена настроек для пользователя
  • Тот же рабочий процесс под Win XP и Win 7

Насколько я вижу, есть 3 возможности для хранения настроек Windows:

  • реестра
  • Ini файл
  • XML файл

только одна заявка нашего В настоящее время пакет использует Qt, но Boost будет доступен.

Для адресов мы помещаем их в какую-то адресную книгу XML, но для других настроек мы не уверены, что лучше всего.

+2

Я хотел бы предложить другие варианты: YAML/JSON для человека - удобный формат, SQLite для простой встраивания. Что касается 'ini' файлов, вы можете быть заинтересованы в [Как разобрать ini-файл с Boost] (http://stackoverflow.com/questions/6175502/how-to-parse-ini-file-with-boost). –

+0

+1 для файлов Boost/ini, если вы можете KI, что SS. – DevSolar

+0

Если вам нужно несколько уровней включений, я бы пошел на файлы XML/JSON. В противном случае ИНИ может быть самым простым решением. – Morwenn

ответ

3

Как упоминалось в комментариях, основанные на деревьях структуры ключей/значений являются общим решением, и библиотеки легко найти.

Boost's property_tree является отличным выбором, так как она хорошо протестирована и может быть легко экспортированы как XML или JSON

Что касается ваших требований:

  • Настройки можно версионируются

Да! Сделайте «версию» ключ верхнего уровня. Сделайте его легко сопоставимым с другими версиями.

Вы также можете классифицировать свои настройки на различные узлы дерева и дать каждому узлу версию.

  • Простое обновление на целевых машинах (может быть сделано пользователем)

Есть приложение сделать это, когда он работает. Смотри ниже.

  • Убедитесь, что обновление только новые настройки добавлены и никакие существующие настройки не будут перезаписаны со значениями по умолчанию
  • Простое изменение настроек для пользователя
  • же рабочий процесс под Win XP и Win 7

Поскольку настройки меняются от одной версии к другой, обычно эти изменения делятся на три категории. Новые свойства необходимы, старые настройки заброшены, а некоторые параметры изменят ожидаемый формат. Например. "32 Fahrenheit" становится "0 по Цельсию"

Когда приложение инициализирует:

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

Ваш "недостающие настройки" функции могут:

  • Возврат постоянное значение по умолчанию.
  • Запрос дерева для различных настроек и преобразовать его (значение по умолчанию, если старый параметр не найден либо)
  • Попросите пользователя
Смежные вопросы