Есть ли общий способ записи и чтения файлов конфигурации?

Мне нужна моя программа для создания и редактирования конфигурационного файла, который будет содержать информацию о множестве объектов, и читать его при каждом выполнении. Есть ли какой-то ориентир для стиля 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 представляет собой постоянный набор свойств. Свойства можно сохранить в потоке или загрузить из потока. Каждый ключ и его соответствующее значение в списке свойств являются строкой.

Как говорили другие, вам нужно будет описать вашу среду, чтобы получить лучшую рекомендацию.