标准c++读取ini文件应使用std::ifstream逐行读取并手动解析,关键步骤为跳过注释、识别节名、提取键值对,配合自定义trim函数和utf-8编码统一处理。
INI 文件读取该用什么 C++ 方式
标准 C++ 没有内置 INI 解析器,std::ifstream 逐行读 + 手动解析是最轻量、最可控的选择。第三方库(如 inih、SimpleIni)虽省事,但引入依赖、增加构建复杂度,小项目反而拖慢迭代节奏。
常见错误是直接套用 Python 思维——试图找“一行代码加载整个配置”,结果卡在编码(Windows 默认 ANSI/GBK)、注释识别、节名嵌套或空格处理上。
- Windows 下记事本保存的 INI 很可能是
GBK编码,std::ifstream默认按本地 locale 解码,Linux/macOS 下会乱码;统一转成 UTF-8 存储是最省心的解法 - 节名格式必须是
[section],前后空格会被当作非法字符;[ section ]不被多数手写解析器识别 - 键值对中的等号两侧允许空格,但有些旧工具(如 Windows API 的
GetPrivateProfileString)会截断左侧空格,自己解析时建议用find_first_of('=')定位而非split('=')
手动解析的关键三步:跳过注释、识别节、提取键值
核心逻辑就三类正则式匹配:以 ; 或 # 开头的行是注释;方括号包裹的是节名;含等号且不在注释行里的,是键值对。别用 std::regex——它在 MSVC 上编译慢、运行慢,还容易因换行符不一致漏匹配。
实操建议用 std::string::find 和 std::string::substr 组合:
立即学习“C++免费学习笔记(深入)”;