这个标题已经很明确了:有没有人知道一个(好的)用于C或C++的属性文件阅读库?
编辑:更具体地说,我想要一个可以处理Java中使用的.properties文件格式的库:http://en.wikipedia.org/wiki/.properties
这个标题已经很明确了:有没有人知道一个(好的)用于C或C++的属性文件阅读库?
编辑:更具体地说,我想要一个可以处理Java中使用的.properties文件格式的库:http://en.wikipedia.org/wiki/.properties
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"];
value_type
是stlsoft::basic_string_view
的实例(在这篇Dr Dobb's文章中有描述),它与std::string
有些相似,但实际上并不拥有其内存。据推测,他们这样做是为了避免不必要的分配,可能是出于性能原因,这是STLSoft设计所珍视的。但这意味着你不能只写std::string value0 = properties["name0"];
std::string value0 = properties["name0"].c_str();
并且这个:
std::cout << properties["name0"];
我不确定我同意这个设计决定,因为从文件或内存中读取属性需要绝对的最后一个周期有多大可能性。我认为他们应该默认使用std::string
,如果需要可以显式地使用“字符串视图”。
除此之外,properties_file
类看起来已经做到了它的功能。
libconfuse(C库)也很有用;它已经存在了很长时间并且灵活。
它远远超出了java.util.Properties的范围。但是,它不一定处理Java属性文件格式的边角案例(似乎这是您的要求)。
请参阅以下示例:
我不知道有没有C++包装库。
# 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");