Библиотека свойств файла для C (или C ++) - PullRequest
11 голосов
/ 17 мая 2009

Название довольно очевидно: кто-нибудь знает о (хорошей) библиотеке для чтения файлов свойств для C или, если нет, C ++?

[Редактировать: точнее говоря, я хочу библиотеку, которая обрабатывает формат файла .properties, используемый в Java: http://en.wikipedia.org/wiki/.properties]

Ответы [ 4 ]

5 голосов
/ 24 мая 2009

STLSoft 1.10 alpha содержит класс platformstl::properties_file. Может использоваться для чтения из файла:

using platformstl::properties_file;

properties_file  properties("stuff.properties");

properties_file::value_type  value = properties["name"];

или по памяти:

properties_file  properties(
    "name0=value1\n name1 value1 \n name\\ 2 : value\\ 2  ",
    properties_file::contents);

properties_file::value_type  value0 = properties["name0"];

properties_file::value_type  value1 = properties["name1"];

properties_file::value_type  value2 = properties["name 2"];

Похоже, что в последнем выпуске 1.10 имеется множество комплексных модульных тестов, и что они обновили класс для обработки всех правил и примеров, приведенных в документации Java .

Единственный очевидный недостаток в том, что value_type является экземпляром stlsoft::basic_string_view (описанным в этой статье доктора Добба ), что несколько похоже на std::string, но на самом деле не владеет своей памятью. Предположительно, они делают это, чтобы избежать ненужных распределений, предположительно по соображениям производительности, что является чем-то, что ценится в дизайне STLSoft. Но это означает, что вы не можете просто написать

std::string  value0 = properties["name0"];

Однако вы можете сделать это:

std::string  value0 = properties["name0"].c_str();

и это:

std::cout << properties["name0"];

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

Кроме этого, класс properties_file выглядит так, как будто он делает свое дело.

4 голосов
/ 24 июня 2009

libconfuse (библиотека C) также полезна; это было всегда и гибко.

Это выходит далеко за рамки java.util.Properties. Тем не менее, он не обязательно будет обрабатывать угловые случаи формата файла свойств java (что кажется вашим требованием).

См. Примеры:

  • просто: www.nongnu.org/confuse/simple.conf
  • сумасшедший: www.nongnu.org/confuse/test.conf

Нет библиотеки-оболочки C ++, о которой я знаю.

2 голосов
/ 23 мая 2016

Poco также имеет реализацию для чтения файлов PropertyFiles. http://pocoproject.org/docs/Poco.Util.PropertyFileConfiguration.html

Простой пример, скопированный отсюда: http://pocoproject.org/slides/180-Configuration.pdf

Содержимое файла недвижимости:

# a comment
! another comment
key1 = value1
key2: 123
key3.longValue = this is a very \
long value
path = c:\\test.dat

Пример кода

#include <Poco/Util/PropertyFileConfiguration.h>
using Poco::AutoPtr;
using Poco::Util::PropertyFileConfiguration;
AutoPtr<PropertyFileConfiguration> pConf;
pConf = new PropertyFileConfiguration("test.properties");
std::string key1 = pConf->getString("key1");
int value = pConf->getInt("key2");
std::string longVal = pConf->getString("key3.longValue");
2 голосов
/ 17 мая 2009

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

В этом случае Google дает (первые 4 хита для C config file library):

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