Методы настройки приложения? C ++ - PullRequest
2 голосов
/ 27 мая 2010

Я думаю о добавлении настраиваемых параметров в приложение, и я думаю, что самые простые способы - это внешний файл или реестр win (это приложение только для победы).

Какой путь будет лучше?

Мне было интересно, пользователь с недостаточными разрешениями может не иметь возможности создавать / записывать файл конфигурации. И в случае с реестром, позволит ли сегодняшний антивирус мне добавлять / редактировать / удалять ключи? Или они только контролируют определенные клавиши?

Также, если кто-то знает класс / lib для управления настройками конфигурации (в чистом win32) в vc ++, пожалуйста, опубликуйте его.

Ответы [ 5 ]

5 голосов
/ 27 мая 2010

Насколько я знаю:

пользователь с недостаточными разрешениями может не иметь возможности создать / записать файл конфигурации

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

позволит ли сегодняшний антивирус мне добавлять / редактировать / удалять ключи?

Никогда не видел, чтобы мой антивирус мешал работе с реестром. Вы, вероятно, будете в порядке, пока вы не делаете ничего подозрительного в реестре.

Какой путь будет лучше?

Это вопрос вкуса. Я думаю, что текстовый файл лучше - позволяет более легкую миграцию настроек. Просто не оставляйте мусор после удаления.

Также, если кто-то знает класс / lib для управления настройками конфигурации в vc ++

QSettings в Qt 4. Но использование всего Qt для простого сохранения настроек, безусловно, является излишним. Вы также можете проверить языки конфигурации, такие как JSON, использовать lua для настроек (меньше лишних, чем при использовании Qt 4) или получить любую библиотеку XML. Кроме того, работа с реестром напрямую или написание файлов конфигурации с использованием iostreams или stdio не должна быть сложной. И вы всегда можете написать свою собственную библиотеку конфигурации - если вам так нравится.

2 голосов
/ 27 мая 2010

«Только для Windows» - это ограничение или ограничение? Если вы не против кроссплатформенности, тогда я советую попробовать boost::program_options. Библиотека поддерживает параметры программы через командную строку, через переменные среды и через файлы INI. Boost's program_options также прекрасно интегрирует и склеивает различные парсеры с помощью variables_map, который вы можете просматривать как карту между опциями и их значением.

1 голос
/ 27 мая 2010

Для простых вещей, вы можете просто использовать реестр. Однако у конфигурационного файла есть много преимуществ ... вы можете сохранять / загружать несколько разных конфигураций для разных применений вашего приложения, проще делиться или переносить настройки между пользователями или машинами и т. Д.

Если вы в конечном итоге пойдете по маршруту файла, я бы порекомендовал библиотеку дерева свойств Boost:

http://www.boost.org/doc/libs/1_41_0/doc/html/property_tree.html

У него довольно приятный синтаксис:

boost::property_tree::ptree properties;

std::string name = properties.get<std::string>("blah.name");
int score = properties.get<int>("blah.score");

properties.put("blah.name", "Inverse");
properties.put("blah.score", 1000);

Он также поддерживает чтение и запись в различные форматы, такие как xml и другие.

0 голосов
/ 27 мая 2010

Если вы сохраните свой файл конфигурации в каталоге Application Data SHGetFolderPath() с помощью CSIDL_COMMON_APPDATA, все пользователи смогут увидеть конфигурацию. Если вы используете CSIDL_LOCAL_APPDATA, то только один пользователь сможет увидеть конфигурацию. Реестр не обязательно является местом для сохранения всех данных конфигурации.

0 голосов
/ 27 мая 2010

Я думаю, что новая вещь по умолчанию - записать файл конфигурации в папку «AppData» пользователя в папке пользователя, которую можно безопасно писать / читать.

Мы используем простой файл в формате XML для хранения настроек; но вы можете использовать форматирование файлов типа INI.

...