用C ++parsingINI文件最简单的方法是什么?

我试图用C ++parsing一个INI文件。 什么是最好的方式来实现这个任何提示? 我应该使用Windows API工具进行INI文件处理(我完全不熟悉),一个开源解决scheme还是试图手动parsing它?

您可以使用Windows API函数,如GetPrivateProfileString()和GetPrivateProfileInt() 。

如果您需要跨平台解决scheme,请尝试Boost的“ 程序选项”库。

我从来没有parsing过ini文件,所以我不能在这个问题上太具体。
但我有一个build议:
只要现有的符合您的要求,不要重新发明轮子

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

祝你好运 :)

我使用SimpleIni 。 它是跨平台的。

如果你已经在使用Qt

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

然后读取一个值

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

还有一些其他转换器可以将INI值转换为标准types和Qttypes。 有关更多信息,请参阅QSettings上的Qt文档。

这个问题有点老,但我会发表我的答案。 我已经testing了各种INI类(你可以在我的网站上看到它们),我也使用simpleIni,因为我想在windows和winCE上使用INI文件。 Window的GetPrivateProfileString()只能用于winCE上的registry。

用simpleIni阅读起来很简单。 这里是一个例子:

 #include "SimpleIni\SimpleIni.h" CSimpleIniA ini; ini.SetUnicode(); ini.LoadFile(FileName); const char * pVal = ini.GetValue(section, entry, DefaultStr); 

inih是用C编写的一个简单的iniparsing器,它也带有一个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的语法。 我比较喜欢XMLconfiguration文件。

如果您对平台可移植性感兴趣,也可以尝试Boost.PropertyTree。 它支持ini作为持久性格式,虽然属性树我只有1层深。

除非您计划跨平台开发应用程序,否则使用Windows API调用将是最好的方法。 只要忽略API文档中有关仅提供16位应用程序兼容性的说明即可。

也许是一个迟到的答案..但是,值得了解的select..如果你需要一个跨平台的解决scheme,当然你可以尝试GLIB ,,其有趣的..( https://developer.gnome.org/glib/stable/glib- Key-value-file-parser.html )

只需使用Win32 API。 别担心,他们很容易。