能,但受兼容性重定向影响——写入可能被悄悄重定向到virtualstore,导致读写路径不一致;务必使用绝对路径、宽字符、权限校验及线程同步。

Windows API 的 WritePrivateProfileString 真的能写入 INI 文件吗?
能,但只在特定条件下生效——它依赖 Windows 的“兼容性重定向”机制,不是直接操作磁盘文件。如果你用绝对路径写入,且目标目录有写权限,它大概率会成功;但如果写入 C:Windows 或受保护路径(比如程序安装目录),系统可能悄悄把写操作重定向到虚拟存储区(C:UsersXXXAppDataLocalVirtualStore...),而你完全看不到变化。
- 默认行为不报错,也不返回失败提示,
WritePrivateProfileString返回非零即算“成功”,但实际落盘位置可能和你预期完全不同 - 32 位程序在 64 位 Windows 上还可能被重定向到
syswow64对应的虚拟路径,加剧排查难度 - 如果 INI 文件本身不存在,该函数会尝试创建;但若父目录不可写(如
Program Files),创建失败且无提示
读取时用 GetPrivateProfileString 却读不到刚写入的值?
根本原因:读写路径不一致。写的时候你以为写到了 C:myappconfig.ini,其实被重定向到了虚拟存储;而读的时候没指定完整路径,系统按默认规则搜索(当前目录 → Windows 目录 → 系统目录),自然找不到。
- 务必对读写都使用**绝对路径**,例如:
"C:\myapp\config.ini"(注意双反斜杠) -
GetPrivateProfileString第四个参数是缓冲区,必须确保足够大(建议至少 1024 字节),否则截断后看起来像“读不到” - 如果 section 名含空格或特殊字符,Windows API 不报错但匹配失败,建议统一用无空格纯字母命名
- 函数返回值是实际复制的字符数(不含结尾
