Есть ли общий способ записи и чтения файлов конфигурации?
Мне нужна моя программа для создания и редактирования конфигурационного файла, который будет содержать информацию о множестве объектов, и читать его при каждом выполнении. Есть ли какой-то ориентир для стиля config, который я могу использовать?
Я использую С++ для окон.
Ответы
Ответ 1
В значительной степени это зависит от языка, платформы и объема ваших файлов конфигурации. Например, файлы свойств в мире Java для конфигурации и другие, уже упомянутые здесь, такие как YAML.
XML, как правило, не одобряется для конфигурации, поскольку он очень подробный. Вы по-прежнему находите его во многих приложениях, в веб-средах и т.д.
Думаю, лучшей практикой будет выбор правильного формата конфигурации для работы. Вы можете оценить и попробовать их для себя, рассматривая эти указатели:
- Какой стандарт? (например, ini файлы в Windows, файлы свойств на Java)
- Есть ли встроенная поддержка на моем языке, или мне нужно перевернуть мою собственную реализацию?
- Может ли мой конфигурационный формат легко описать, что я хочу сохранить как конфигурацию?
Я уверен, что вы могли бы подумать о других соображениях. Если вы обновите свой вопрос, чтобы уточнить область действия, вы получите более полезные ответы.
Ответ 2
Я рекомендую проверить boost:: property_tree.
Библиотека дерева свойств предоставляет структуру данных, в которой хранится произвольно глубоко вложенное дерево значений, индексированное на каждом уровне некоторым ключом. Каждый node дерева сохраняет свое собственное значение, а также упорядоченный список его подузлов и их ключей. Дерево позволяет легко получить доступ к любому из его узлов с помощью пути, который является конкатенацией нескольких ключей.
Кроме того, он содержит синтаксические анализаторы и генераторы для XML, INI и JSON, поэтому вы можете сохранить/загрузить в выбранном вами формате.
Ответ 3
YAML - очень популярное решение для создания файлов конфигурации. Например, это используется Ruby on Rails и Google AppEngine. Библиотеки YAML доступны для многих, если не для большинства языков.
Ответ 4
Если вы работаете с Qt (по другим вопросам),
просмотрите класс QSettings. Я использовал их для установки много постоянной информации, такой как последний посещенный каталог и какие параметры в последний раз использовались.
Ответ 5
boost:: program_options имеет некоторую способность читать ini файлы.
Хорошо, что это позволяет унифицировать чтение файлов ini и параметров командной строки. По мере того как программа Windows идет, это не может рассматриваться как такое интересное будущее, но для моего приложения unix это была функция убийцы.
Однако boost:: po не позволяет редактировать или записывать ini файлы, поэтому вам, вероятно, будет лучше с boost:: property_tree.
Ответ 6
Наиболее распространенным форматом является формат INI File. Большинство mdoern-языков должны иметь что-то встроенное для обработки, иначе я уверен, что вы сможете найти стороннюю библиотеку.
В противном случае вы можете использовать XML, и если ваш язык поддерживает его, сериализация и десериализация из этих XML файлов. Если вы не хотите/не можете использовать XML, большинство языков будут иметь формат по умолчанию, который они используют, например, чистый двоичный дамп данных в объекте.
Ответ 7
Существует бесплатная межплатформенная библиотека для управления файлами конфигурации, называемая libconfig. Он поддерживает очень приятную грамматику на основе языка Ямл и поддерживает пользовательскую грамматику. Он также имеет множество других языковых привязок. См. Домашнюю страницу: http://www.hyperrealm.com/libconfig/.
Ответ 8
В мире Java файл свойств довольно прост в использовании:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html
Класс Properties представляет собой постоянный набор свойств. Свойства можно сохранить в потоке или загрузить из потока. Каждый ключ и его соответствующее значение в списке свойств являются строкой.
Как говорили другие, вам нужно будет описать вашу среду, чтобы получить лучшую рекомендацию.