用C ++解析INI文件最简单的方法是什么?
我正在尝试使用C ++解析INI文件。关于实现此目标的最佳方法的任何技巧?我应该使用Windows API工具进行INI文件处理(我完全不熟悉),开放源代码解决方案还是尝试手动解析它?
解决方案
回答
我从未解析过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
祝你好运 :)
回答
我们可以使用Windows API函数,例如GetPrivateProfileString()和GetPrivateProfileInt()。
回答
除非我们打算跨平台开发该应用程序,否则使用Windows API调用将是最好的方法。只需忽略API文档中有关仅为16位应用程序兼容性而提供的说明。
回答
如果我们需要跨平台的解决方案,请尝试Boost的程序选项库。
回答
我使用SimpleIni。它是跨平台的。
回答
我们尝试过libconfig吗?非常类似于JSON的语法。与XML配置文件相比,我更喜欢它。
回答
这个问题有点老了,但是我会发表我的答案。我已经测试了各种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);
回答
如果我们已经在使用Qt
QSettings my_settings("filename.ini", QSettings::IniFormat);
然后读取一个值
my_settings.value("GroupName/ValueName", <<DEFAULT_VAL>>).toInt()
还有很多其他转换器,可将INI值转换为标准类型和Qt类型。有关更多信息,请参见QSettings上的Qt文档。