在Windows平台的C++开发中,ini配置文件因为结构简单、易编辑的特点,常被用来存储程序的各类运行参数,比如数据库连接信息、界面布局设置等。GetPrivateProfileString是Windows API提供的专门用于读取ini文件中字符串类型配置的函数,掌握它的用法能快速实现配置读取功能。

GetPrivateProfileString函数基础说明
GetPrivateProfileString是kernel32.dll导出的函数,使用时需要包含windows.h头文件,它的函数原型如下:
#include <windows.h> DWORD GetPrivateProfileString( LPCTSTR lpAppName, // 配置段名称 LPCTSTR lpKeyName, // 配置项名称 LPCTSTR lpDefault, // 读取失败时的默认返回值 LPTSTR lpReturnedString, // 接收读取结果的缓冲区 DWORD nSize, // 缓冲区大小(单位:字符) LPCTSTR lpFileName // ini文件的完整路径 );
函数返回值是实际读取到的字符数,如果读取失败则返回值等于0,此时缓冲区中会被填充默认字符串。
基础读取示例
假设我们有一个test.ini配置文件,内容如下:
[Database] Host=127.0.0.1 Port=3306 User=root
读取其中Host配置项的代码如下:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
TCHAR host[128] = {0};
// 读取test.ini中[Database]段的Host项,默认值为空字符串
DWORD ret = GetPrivateProfileString(
_T("Database"), // 段名
_T("Host"), // 键名
_T(""), // 默认值
host, // 接收缓冲区
128, // 缓冲区大小
_T("./test.ini") // ini文件路径,当前目录下的test.ini
);
if (ret > 0) {
wcout << L"读取到的Host为:" << host << endl;
} else {
wcout << L"读取Host失败,使用默认值" << endl;
}
return 0;
}
需要注意ini文件路径的写法,如果是相对路径,是相对于程序运行目录的,也可以使用绝对路径比如_T("C:\config\test.ini"),Windows路径中的反斜杠需要转义。
常见使用场景
读取整型配置项
GetPrivateProfileString只能读取字符串类型,如果需要读取整型配置,可以先读取字符串再转换:
#include <windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
int main() {
TCHAR portStr[32] = {0};
// 先读取字符串形式的Port
GetPrivateProfileString(_T("Database"), _T("Port"), _T("3306"), portStr, 32, _T("./test.ini"));
// 转换为整型,_ttoi是支持Unicode的字符转整型函数
int port = _ttoi(portStr);
wcout << L"读取到的Port为:" << port << endl;
return 0;
}
读取中文配置内容
如果ini文件中包含中文,需要保证ini文件保存为UTF-16 LE编码(带BOM),同时代码中使用宽字符相关函数和类型:
#include <windows.h>
#include <iostream>
using namespace std;
int main() {
// ini文件中[User]段有Name=张三的配置
TCHAR name[64] = {0};
GetPrivateProfileString(_T("User"), _T("Name"), _T("未知"), name, 64, _T("./test.ini"));
wcout << L"用户名为:" << name << endl;
return 0;
}
设置默认值
当配置项不存在或者读取失败时,lpDefault参数指定的默认值会被写入接收缓冲区,比如上面的示例中Port项如果不存在,就会默认返回3306,避免程序出现参数错误。
注意事项
- GetPrivateProfileString是Windows平台专属API,无法在Linux、macOS等非Windows系统中使用,跨平台场景可以选择使用iniparser、boost::property_tree等第三方库。
- 缓冲区大小要足够容纳读取的内容和结尾的空字符,否则可能出现读取截断的问题。
- ini文件路径必须正确,程序需要有该文件的读取权限,否则会读取失败。
- 函数区分大小写,段名和键名的大小写需要和ini文件中的内容完全一致,否则会读取不到对应配置。
替代方案说明
如果需要在非Windows平台读取ini文件,可以使用开源的iniparser库,它的使用方式如下:
#include <stdio.h>
#include "iniparser.h"
int main() {
dictionary *ini = iniparser_load("./test.ini");
if (ini == NULL) {
printf("打开ini文件失败n");
return -1;
}
// 读取Database段的Host项,默认值为空
const char *host = iniparser_getstring(ini, "Database:Host", "");
printf("Host为:%sn", host);
iniparser_freedict(ini);
return 0;
}
iniparser库是跨平台的,支持Windows、Linux等系统,适合需要跨平台读取ini配置的场景使用。
C++GetPrivateProfileStringini配置文件Windows_API修改时间:2026-07-11 06:09:12