Мне было интересно, существует ли соглашение для хранения файлов конфигурации в C++. На данный момент я сохраняю файлы конфигурации в том же каталоге, что и исходный код, который их использует. При создании я убедился, что с помощью CMakeLists можно скопировать их в нужное место, поэтому я могу просто получить доступ к ним соответствующим образом (например, «config.cfg» iso »/foo/bar/config.cfg) для удобства.Расположение конфигурационных файлов в проекте C++
2
A
ответ
4
Практика для конфигурационных файлов не является переносимой и зависит от операционной системы. Вы также должны спросить себя, определена ли ваша конфигурация для каждой установки/системы или для пользователя.
В общем, очень плохо хранить конфигурацию в такой же каталог, как и ваш исполняемый файл, по крайней мере, после завершения разработки. В общем случае исполняемые файлы могут совместно использоваться несколькими пользователями и поэтому по соображениям безопасности должны быть расположены в каталогах, защищенных от записи для всех, кроме системного администратора.
Для UNIX/Linux, вы могли бы, например, рассмотреть следующие вопросы:
/etc
или вложенной его, если ваша конфигурация в установленной системе,~/
если это определяется пользователем конфигурации. Обычной практикой было бы начать имя файла с точки. Это article расскажет вам больше.
Для оконных систем, вы должны рассмотреть следующие вопросы:
- обычный подход теперь идет к registry. Конечно, это использует windows api и полностью не переносится.
- вложенная
C:\ProgramData
илиC:\Users\All users\AppData\Local
если ваша конфигурация в установленной систему, - вложенная
C:\Users\%USERNAME%\AppData\Local
для собственной конфигурации пользователей, игровые. Это SO questions показывает, как найти нужные папки.
Это зависит очень сильно от операционной системы. В Windows соглашение должно либо использовать реестр, либо использовать каталог установки для конфигурации по умолчанию и '% APPDATA%' для пользовательских настроек. В Linux он может * быть '~/.theusersconfig','/etc/globalconfig' и '/ install/path/defaultconfig' (но может также быть совершенно другим). На OSX я не знаю. –