2010-04-16 3 views
10

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

Я использую C++ для окон.

+1

Какой язык и что бы вы хотели сохранить, строки или дампы реальных объектов, например элементы gui, объекты со сложной структурой и т. Д.? – pajton

ответ

5

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

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

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

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

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

2

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

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

+1

Это * был * самый распространенный 10 лет назад. Вещи немного изменились. XML, YAML и JSON - это путь к успеху. – marzapower

5

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

0

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

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

11

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

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

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

3

Если вы работаете с Qt (с учетом других вопросов),

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

3

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

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

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

1

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

Смежные вопросы