C(或C++)的属性文件库

Jam*_*ieH 13 c c++ properties

标题是不言自明的:有没有人知道C的(好的)属性文件阅读器库,如果没有,C++?

[编辑:具体来说,我想要一个处理Java中使用的.properties文件格式的库:http://en.wikipedia.org/wiki/.properties]

dcw*_*dcw 5

STLSoft1.10 alpha包含一个platformstl::properties_file类.它可用于从文件中读取:

using platformstl::properties_file;

properties_file  properties("stuff.properties");

properties_file::value_type  value = properties["name"];
Run Code Online (Sandbox Code Playgroud)

或者从记忆中:

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"];
Run Code Online (Sandbox Code Playgroud)

看起来最新的1.10版本有一堆全面的单元测试,并且他们已经升级了类来处理Java文档中给出的所有规则和示例.

唯一明显的问题是,它value_typestlsoft::basic_string_view(在Dobb博士的文章中描述)的一个实例,它有点类似于std::string,但实际上并没有自己的记忆.据推测,他们这样做是为了避免不必要的分配,大概是出于性能原因,这是STLSoft设计所珍视的.但这意味着你不能只写

std::string  value0 = properties["name0"];
Run Code Online (Sandbox Code Playgroud)

但是,您可以这样做:

std::string  value0 = properties["name0"].c_str();
Run Code Online (Sandbox Code Playgroud)

还有这个:

std::cout << properties["name0"];
Run Code Online (Sandbox Code Playgroud)

我不确定我是否同意这个设计决定,因为从文件或内存中读取属性的可能性有多大可能需要绝对的最后一个周期.我认为他们应该将其更改为std::string默认使用,然后在明确要求时使用"字符串视图".

除此之外,该properties_file课程看起来像是诀窍.


mic*_*ael 5

libconfuse(C 库)也很有用;它一直存在并且很灵活。

它远远超出了 java.util.Properties。不过,它不一定能处理 java 属性文件格式的极端情况(这似乎是您的要求)。

请参阅示例:

  • 简单:www.nongnu.org/confuse/simple.conf
  • 疯狂:www.nongnu.org/confuse/test.conf

不过据我所知,没有 C++ 包装库。