我正在尝试使用C++解析INI文件.关于什么是实现这一目标的最佳方法的任何提示?我应该使用Windows API工具进行INI文件处理(我完全不熟悉),一个开源解决方案或尝试手动解析它?
如果您需要跨平台解决方案,请尝试Boost的程序选项库.
您可以使用Windows API函数,例如GetPrivateProfileString()和GetPrivateProfileInt().
我从来没有解析过ini文件,所以我不能在这个问题上过于具体.
但我有一个建议:只要现有车轮满足您的要求,就
不要重新发明轮子
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", <>).toInt()
还有许多其他转换器可以将INI值转换为标准类型和Qt类型.有关更多信息,请参阅QSettings上的Qt文档.
这个问题有点陈旧,但我会发布我的答案.我已经测试了各种INI类(你可以在我的网站上看到它们),我也使用simpleIni,因为我想在windows和winCE上使用INI文件.Window的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";
作者还在此处列出了现有库.