2010-05-27 3 views
2

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

Какой способ был бы лучше?

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

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

ответ

5

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

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

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

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

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

В каком виде было бы лучше?

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

Кроме того, если кто-то знает класс/Библиотека для управления параметрами конфигурации в VC++

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

+0

+1: «Я думаю, что текстовый файл лучше - позволяет легче переносить настройки». Для производственных приложений это очень важное соображение. Можно экспортировать и импортировать кусты реестра, но пользователи, как правило, не получают этого, и вы можете не захотеть, чтобы они обманывали реестр. –

+0

Это также зависит от того, какой язык вы собираетесь использовать. Pure C++ не предлагает поддержку реестра. Вы почти застряли в чтении и записи текстовых файлов. Да, вы можете открыть их с легкостью, но разбор и поиск значений становится PITA, если у вас есть большое количество настроек для работы. Если у вас есть доступ к Win32/MFC/COM и т. Д., Я бы очень хотел поговорить с реестром. Это невероятно легко читать и писать, а всего лишь несколько строк кода. Инкапсулируйте это в классе, и у вас есть очень элегантное многоразовое решение. – Justin

0

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

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

0

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

2

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

1

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

Если вы в конечном итоге происходит маршрут файла, я бы порекомендовал Tree Property библиотеку 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 и другие ,

Смежные вопросы