C (または C++) 用のプロパティ ファイル ライブラリ

STLSoft の 1.10 アルファには 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 のインスタンスです (この Dobb 博士の記事で説明されています)、これは std::string にいくらか似ています。 、しかし実際にはそのメモリを所有していません。おそらくパフォーマンス上の理由から、不必要な割り当てを避けるためにこれを行っていると思われます。しかし、それはあなたがただ書くことができないことを意味します

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

ただし、これを行うことはできます:

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

そしてこれ:

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

ファイルまたはメモリからプロパティを読み取るには、絶対的な最後のサイクルが必要になる可能性が高いため、この設計上の決定に同意するかどうかはわかりません。 std::string を使用するように変更する必要があると思います デフォルトでは、明示的に必要な場合は「文字列ビュー」を使用します。

それ以外は properties_file


libconfuse (C ライブラリ) も便利です。それは永遠に存在しており、柔軟性があります。

  • ( www.nongnu.org/confuse/ ) http://www.nongnu.org/confuse/tutorial-html/index.html

これは、java.util.Properties をはるかに超えています。ただし、必ずしも Java プロパティ ファイル形式のコーナー ケースを処理するとは限りません (これは要件のようです)。

例を参照してください:

  • シンプル:www.nongnu.org/confuse/simple.conf
  • クレイジー:www.nongnu.org/confuse/test.conf

ただし、私が認識している C++ ラッパー ライブラリはありません。


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");