我正在尝试使用C++解析INI文件。有什么最佳实践来实现这一目标吗?我应该使用Windows API提供的INI文件处理工具(我对此完全不熟悉),选择开源解决方案还是尝试手动解析呢?
您可以使用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
祝好运:)
QSettings my_settings("filename.ini", QSettings::IniFormat);
然后读取一个值
my_settings.value("GroupName/ValueName", <<DEFAULT_VAL>>).toInt()
还有一堆其他的转换器可以将您的INI值转换为标准类型和Qt类型。有关更多信息,请参阅QSettings的Qt文档。
sync()
,这可能会让人感到惊讶),并且这会破坏以前定义变量的注释和顺序... - Alexis Wilke我使用 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";
作者还有一个现有库的列表在这里。
我最终使用了未在此帖中提到的inipp。
https://github.com/mcmtroffaes/inipp
这是一个MIT许可证的头文件实现,非常简单易用,只需要将其添加到项目中,再加上四行代码即可。