C++ を使用して INI ファイルを解析しようとしています。これを達成するための最良の方法は何ですか?INI ファイル処理 (私はまったく慣れていません) に Windows API ツールを使用するか、オープンソース ソリューションを使用するか、手動で解析する必要がありますか?
13 に答える
クロスプラットフォーム ソリューションが必要な場合は、Boost のProgram Optionsライブラリを試してください。
GetPrivateProfileString()やGetPrivateProfileInt( )などの Windows API 関数を使用できます。
私は ini ファイルを解析したことがないので、この問題について詳しくは言えません。
ただし、1 つのアドバイス
があります。既存の車輪が要件を満たしている限り、車輪を再発明しないでください。
http://en.wikipedia.org/wiki/INI_file#Accessing_INI_files
http://sdl-cfg.sourceforge.net/
http://sourceforge.net/projects/libini/
http://www.codeproject.com/KB /files/config-file-parser.aspx
幸運を :)
すでに Qt を使用している場合
QSettings my_settings("filename.ini", QSettings::IniFormat);
次に、値を読み取ります
my_settings.value("GroupName/ValueName", <<DEFAULT_VAL>>).toInt()
INI 値を標準型と Qt 型の両方に変換するコンバータは他にもたくさんあります。詳細については、QSettings に関する Qt のドキュメントを参照してください。
SimpleIniを使用しています。クロスプラットフォームです。
この質問は少し古いですが、回答を投稿します。私はさまざまな INI クラスをテストしました (私のWeb サイトで確認できます)。Windows と winCE の両方で INI ファイルを操作したいので、simpleIni も使用します。Windows の GetPrivateProfileString() は、winCE のレジストリでのみ機能します。
simpleIni で読むのはとても簡単です。次に例を示します。
#include "SimpleIni\SimpleIni.h"
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile(FileName);
const char * pVal = ini.GetValue(section, entry, DefaultStr);
inihは C で書かれた単純な ini パーサーで、C++ ラッパーも付属しています。使用例:
#include "INIReader.h"
INIReader reader("test.ini");
std::cout << "version="
<< reader.GetInteger("protocol", "version", -1) << ", name="
<< reader.Get("user", "name", "UNKNOWN") << ", active="
<< reader.GetBoolean("user", "active", true) << "\n";
著者は、ここに既存のライブラリのリストも持っています。
libconfigを試しましたか?非常に JSON に似た構文です。XML 構成ファイルよりもこちらの方が好みです。
プラットフォームの移植性に関心がある場合は、Boost.PropertyTree を試すこともできます。永続化形式として ini をサポートしますが、プロパティ ツリーは 1 レベルの深さしかありません。
アプリをクロスプラットフォームにする予定がない限り、Windows API 呼び出しを使用するのが最善の方法です。16 ビット アプリとの互換性のためにのみ提供されているという API ドキュメントの注記は無視してください。
多分遅い答え..しかし、オプションを知る価値があります..クロスプラットフォームソリューションが必要な場合は、間違いなくGLIBを試すことができます..( https://developer.gnome.org/glib/stable/glib- Key-Value-file-parser.html )