1. 为什么INI文件在Windows开发中经久不衰
在Windows平台做C++开发十几年,我见过各种配置方案来来去去,但INI文件始终占据一席之地。这种看似古老的格式之所以能活到现在,关键在于三个不可替代的优势:第一是人机双读的特性——用记事本就能编辑,程序也能快速解析;第二是轻量级,不需要引入第三方库;第三是Windows API原生支持,调用一个GetPrivateProfileString就能读取配置。
最近给一个工业控制软件做配置模块时,我又一次选择了INI方案。这个软件需要管理200多个设备参数,XML和JSON虽然结构化更好,但车间工程师更习惯直接打开INI文件修改阈值。下面我就结合这个实战案例,分享Windows环境下操作INI文件的完整方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Windows API的两种经典用法
2.1 原生API的同步操作
Windows提供了两组操作INI的API,先说最基础的同步版本。读取配置的核心是GetPrivateProfileString,它的参数设计非常Windows风格:
cpp复制DWORD GetPrivateProfileString(
LPCSTR lpAppName, // 节名称,如"[Device]"
LPCSTR lpKeyName, // 键名,如"Timeout"
LPCSTR lpDefault, // 默认值
LPSTR lpReturnedString, // 输出缓冲区
DWORD nSize, // 缓冲区大小
LPCSTR lpFileName // 文件路径
);
实际使用时要注意三个坑:
- 缓冲区长度必须足够,否则会截断数据。我习惯先用
GetPrivateProfileInt试探性地读取一次 - 路径中的反斜杠需要转义,建议用
R"(C:\config.ini)"原始字符串 - 默认值参数不能为NULL,否则会读取失败
写入配置则用WritePrivateProfileString,这里有个冷知识:写入操作在Win10上其实是异步的,如果紧接着读取可能拿到旧值。解决方法是在写入后调用`FlushFileBuff
