答案:Windows下常用GetPrivateProfileString和GetPrivateProfileInt读取INI文件,跨平台可选SimpleIni等库。示例展示了读取字符串、整数和布尔值的方法,并强调路径与编码问题。

在C++中读取INI配置文件,最常用的方法是使用Windows API提供的函数,比如 GetPrivateProfileString 和 GetPrivateProfileInt。这些函数可以直接操作标准的INI文件格式,无需引入第三方库,适合Windows平台下的简单配置管理。
1. INI文件的基本结构
INI文件是一种文本格式的配置文件,通常包含节(section)、键(key)和值(value),例如:
[Database]Host=localhost
Port=3306
[App]
Timeout=30
EnableLog=true
2. 使用Windows API读取字符串
通过 GetPrivateProfileString 可以读取指定节和键的字符串值。
函数原型如下:
立即学习“C++免费学习笔记(深入)”;
DWORD GetPrivateProfileString(LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
示例代码:
#include windows.h>#include iostream>
#include
int main() {
char buffer[256] = {0};
std::string iniFile = "config.ini";
// 读取 Database.Host
GetPrivateProfileString("Database", "Host", "127.0.0.1",
buffer, 256, iniFile.c_str());
std::cout
return 0;
}
3. 读取整数和布尔值
使用 GetPrivateProfileInt 可以直接读取整型值。
示例:
int timeout = GetPrivateProfileInt("App", "Timeout", 10, iniFile.c_str());std::cout
对于布尔值(如 "true"/"false"),可以读成字符串再判断:
GetPrivateProfileString("App", "EnableLog", "false", buffer, 256, iniFile.c_str());bool enableLog = (std::string(buffer) == "true");
4. 跨平台或更复杂场景:使用第三方库
如果项目需要跨平台(Linux/macOS),Windows API不可用,可考虑使用轻量级库:
- iniparser:C语言编写,简洁高效
- SimpleIni:单头文件,支持Unicode和跨平台
- Boost.PropertyTree:功能强大,但依赖Boost
以 SimpleIni 为例:
#include "SimpleIni.h"CSimpleIniA ini;
ini.SetUnicode();
SI_Error rc = ini.LoadFile("config.ini");
if (rc
const char* host = ini.GetValue("Database", "Host", "localhost");
long port = ini.GetLongValue("Database", "Port", 3306);
基本上就这些。Windows下用API最快,跨平台建议用SimpleIni之类的轻量库,不复杂但容易忽略编码和路径问题。确保INI文件路径正确,最好用绝对路径调试初期。











