Лучший способ хранения / извлечения данных конфигурации в Modern Windows - PullRequest
2 голосов
/ 19 февраля 2011

В последнее время я мало занимался написанием кода для Windows, и сейчас я нахожусь в Visual Studio, создавая небольшую программу для Windows 7 на C ++. Мне нужны данные конфигурации для чтения / записи.

В старые времена (будучи парнем из Borland) я просто использовал TIniFile и держал .ini рядом с моим exe. Очевидно, что это больше не готово. Документы MS сообщают мне, что Get / WritePrivateProfileString предназначены только для совместимости, и я сомневаюсь, что в эти дни мне не помешает запись в Program Files. Черт возьми, я чувствую себя старым.

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

Итак, каков современный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2011

Часто люди используют XML-файлы для хранения предпочтений, но они часто излишни (и на самом деле они не настолько удобочитаемы для людей).

Если ваши потребности легко удовлетворятся с помощью файла INI, выВозможно, вы захотите использовать Boost.Program_options , используя сервер синтаксического анализа файла конфигурации, который на самом деле записывает INI-подобные файлы, не проходя через устаревшие (и медленные!) API-интерфейсы, в то же время демонстрируя красивый интерфейс C ++.

Ключевая вещь, чтобы получить право, где написать такой файл конфигурации.Правильным местом обычно является подкаталог (называемый, например, как ваше приложение) каталога данных приложения пользователя;пожалуйста, пожалуйста, пожалуйста, не используйте его путь в вашем исполняемом файле , я видел достаточно сломанных приложений, которые не понимают, что профиль пользователя может отсутствовать в c:\Documents and settings\Username.

Вместо этого вы можете получить путь к данным приложения, используя функцию SHGetFolderPath с CSIDL_APPDATA (или SHGetKnownFolderPath с FOLDERID_RoamingAppData, если вы нене теряйте совместимость с версиями Windows, предшествующими Vista, или даже просто расширяя переменную среды %APPDATA%.

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

1 голос
/ 19 февраля 2011

Это мое мнение (которое, я думаю, большинство ответов, которые вы получите, будет мнением), но кажется, что в наши дни стандартным способом работы является хранение таких файлов конфигурации в C:\Users\<Username>.Более того, как правило, лучше не загромождать сам этот каталог, а использовать подкаталог для хранения данных вашего приложения, например, C:\Users\<Username>\AppData\Roaming\<YourApplicationName>.Это может быть излишним для одного файла конфигурации, но это даст вам возможность хранить все данные вашего приложения в одном месте, если вы добавите еще больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...