Есть ли какой-нибудь распространенный способ записи и чтения файлов конфигурации? - PullRequest
10 голосов
/ 16 апреля 2010

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

Я использую C ++ в Windows.

Ответы [ 8 ]

10 голосов
/ 17 апреля 2010

Я рекомендую проверить boost :: property_tree .

Библиотека дерева свойств предоставляет структуру данных, в которой хранится произвольно глубоко вложенное дерево значений, индексируемое на каждом уровне некоторым ключом. Каждый узел дерева хранит свое собственное значение, а также упорядоченный список его подузлов и их ключей. Дерево обеспечивает легкий доступ к любому из его узлов с помощью пути, который является объединением нескольких ключей.

Кроме того, он содержит парсеры и генераторы для XML, INI и JSON, поэтому вы можете сохранять / загружать файлы в выбранном вами формате.

5 голосов
/ 16 апреля 2010

Это в значительной степени зависит от языка, платформы и объема ваших файлов конфигурации. Например, файлы свойств в мире Java для конфигурации и другие, уже упомянутые здесь, такие как YAML.

XML обычно не одобряется для конфигурации, так как он очень многословен. Вы все еще найдете его во многих приложениях, веб-фреймворках и т. Д.

Я думаю, что наилучшей практикой будет выбор правильного формата конфигурации для работы под рукой. Вы можете оценить и попробовать их сами, учитывая следующие указания:

  1. Какой стандарт? (например, ini-файлы в Windows, файлы свойств в Java)
  2. Есть ли в моем языке встроенная поддержка или мне нужно развернуть собственную реализацию?
  3. Может ли мой формат конфигурации легко описать то, что я хочу сохранить в качестве конфигурации?

Я уверен, что вы могли бы подумать о других соображениях. Если вы обновите свой вопрос, чтобы уточнить сферу, вы получите более полезные ответы.

5 голосов
/ 16 апреля 2010

YAML - очень популярное решение для создания файлов конфигурации. Например, он широко используется Ruby on Rails и Google AppEngine. Библиотеки YAML доступны для многих, если не для большинства языков.

3 голосов
/ 29 июня 2010

boost :: program_options обладает некоторой способностью читать ini-файлы.

Что приятно, так это возможность унифицировать чтение ini-файлов и параметров командной строки. Что касается программы для Windows, то это может показаться не столь интересным будущим, но для моего приложения для Unix это была убийственная функция.

Однако boost :: po не позволяет редактировать или записывать ini-файлы, поэтому вам, вероятно, будет лучше с boost :: property_tree.

3 голосов
/ 23 апреля 2010

Если вы работаете с Qt (основываясь на других ваших вопросах),

посмотрите на класс QSettings. Я использовал их, чтобы установить много постоянной информации, такой как последний посещенный каталог и какие параметры использовались в последний раз.

2 голосов
/ 16 апреля 2010

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

В противном случае вы можете использовать XML и, если ваш язык поддерживает его, сериализовать и десериализовать из этих файлов XML. Если вы не хотите / не можете использовать XML, большинство языков будут иметь формат по умолчанию, который они используют, например, чистый двоичный дамп данных в объекте.

1 голос
/ 05 августа 2010

Существует бесплатная кроссплатформенная библиотека для управления файлами конфигурации, которая называется libconfig. Он поддерживает очень хорошую грамматику на основе Yaml, а также поддерживает пользовательскую грамматику. У этого также есть много других привязок языка вычислений. Смотрите домашнюю страницу: http://www.hyperrealm.com/libconfig/.

0 голосов
/ 16 апреля 2010

В мире Java файл свойств довольно прост в использовании: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html Класс Properties представляет постоянный набор свойств. Свойства могут быть сохранены в поток или загружены из потока. Каждый ключ и соответствующее ему значение в списке свойств является строкой.

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

...