89

C++ を使用して INI ファイルを解析しようとしています。これを達成するための最良の方法は何ですか?INI ファイル処理 (私はまったく慣れていません) に Windows API ツールを使用するか、オープンソース ソリューションを使用するか、手動で解析する必要がありますか?

4

13 に答える 13

118

クロスプラットフォーム ソリューションが必要な場合は、Boost のProgram Optionsライブラリを試してください。

于 2008-08-23T01:21:09.857 に答える
115

GetPrivateProfileString()GetPrivateProfileInt( )などの Windows API 関数を使用できます。

于 2008-08-15T20:06:53.140 に答える
23

私は 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

幸運を :)

于 2008-08-15T19:33:31.397 に答える
20

すでに Qt を使用している場合

QSettings my_settings("filename.ini", QSettings::IniFormat);

次に、値を読み取ります

my_settings.value("GroupName/ValueName", <<DEFAULT_VAL>>).toInt()

INI 値を標準型と Qt 型の両方に変換するコンバータは他にもたくさんあります。詳細については、QSettings に関する Qt のドキュメントを参照してください。

于 2010-12-03T06:59:42.550 に答える
16

SimpleIniを使用しています。クロスプラットフォームです。

于 2008-09-22T17:58:15.750 に答える
8

この質問は少し古いですが、回答を投稿します。私はさまざまな 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);
于 2009-12-26T22:11:04.453 に答える
6

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

著者は、ここに既存のライブラリのリストも持っています。

于 2013-08-13T12:24:26.717 に答える
4

libconfigを試しましたか?非常に JSON に似た構文です。XML 構成ファイルよりもこちらの方が好みです。

于 2008-12-16T17:13:30.133 に答える
3

プラットフォームの移植性に関心がある場合は、Boost.PropertyTree を試すこともできます。永続化形式として ini をサポートしますが、プロパティ ツリーは 1 レベルの深さしかありません。

于 2013-03-18T19:40:28.750 に答える
2

アプリをクロスプラットフォームにする予定がない限り、Windows API 呼び出しを使用するのが最善の方法です。16 ビット アプリとの互換性のためにのみ提供されているという API ドキュメントの注記は無視してください。

于 2008-08-15T20:10:46.143 に答える
1

多分遅い答え..しかし、オプションを知る価値があります..クロスプラットフォームソリューションが必要な場合は、間違いなくGLIBを試すことができます..( https://developer.gnome.org/glib/stable/glib- Key-Value-file-parser.html )

于 2015-02-09T17:36:16.337 に答える