You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:43:11