GetPrivateProfileString自动去除首尾引号问题及解决方案咨询
解决GetPrivateProfileString自动去除首尾引号的问题
问题场景
INI文件内容:
[Test] Item="123","456"
使用Windows API的GetPrivateProfileString读取时,执行以下代码:
StringBuilder stringBuilder = new StringBuilder(500); WINAPI.GetPrivateProfileString("Test", "Item", "", stringBuilder,500, "D:\\Test.ini"); var _value = stringBuilder.ToString(0, stringBuilder.Length); // 实际结果为123","456,而非预期的"123","456"
这是因为GetPrivateProfileString的设计逻辑会自动识别并移除值首尾的成对双引号,属于API的默认行为。
可行解决办法
修改INI文件格式
给原始值的首尾额外添加一对双引号,利用API解析连续双引号为单个引号的规则,让最终读取结果保留目标引号:[Test] Item="""123","456"""此时API读取后会返回
"123","456",符合预期。手动补全首尾引号
如果确定目标INI项的原始值必然以双引号包裹,可以在读取后手动添加首尾引号:StringBuilder stringBuilder = new StringBuilder(500); WINAPI.GetPrivateProfileString("Test", "Item", "", stringBuilder,500, "D:\\Test.ini"); var _value = $"\"{stringBuilder.ToString(0, stringBuilder.Length)}\"";注意:如果存在部分项不带首尾引号的情况,该方法会错误添加引号,需谨慎使用。
替换为第三方INI解析库
使用不自动处理引号的第三方库(如IniParser),直接读取原始内容:var parser = new IniParser.IniParser(); var iniData = parser.ReadFile("D:\\Test.ini"); var _value = iniData["Test"]["Item"]; // 直接获取到原始的"123","456"
内容的提问来源于stack exchange,提问作者EvaHHHH
相关产品推荐
相关产品推荐

