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

ini-parser 2.5.2解析含重复键的INI文件时触发Duplicate Key异常的解决方法咨询

ini-parser 2.5.2解析含重复键的INI文件时触发Duplicate Key异常的解决方法咨询

我最近在.NET 4.7的项目里刚装了ini-parser 2.5.2,测试的时候遇到了个棘手的问题——我的INI文件里有重复的键值对,解析的时候直接抛出了重复键的异常,想问问大家有没有办法解决?

问题场景

我的INI文件里的INSTANCES section结构如下:

[INSTANCES]
NUMVTC=3
VTC=0,3330,ABCD,Descr1
VTC=1,3331,EFGH,Descr2
VTC=2,3332,IJKL,Descr3

最初的尝试与报错

我写了个方法尝试读取所有VTC的value,代码如下:

public static List<string> GetIniSectionData(string iniFilePath, string section, string key)
{
    List<string> ls = new List<string>();
    var parser = new FileIniDataParser();
    IniData data = parser.ReadFile(iniFilePath); // 此处抛出异常:Parsing exception: Duplicate key 'VTC' found in section 'INSTANCES'
    int cnt = data[section].Count;
    while(!string.IsNullOrEmpty(data[section][key]))
    {
        ls.Add(data[section][key]);
    }
    return ls;
}

结果一执行到parser.ReadFile就直接炸了,提示在INSTANCES section里发现重复的VTC键。

我的临时解决办法

折腾了一阵后,发现ini-parser好像确实不原生支持重复键的场景,于是我换了个思路,直接用Linq读取文件内容来处理,绕开了这个库的限制:

var vals = File.ReadLines(sMappingFilePath)
    .SkipWhile(line => !line.StartsWith("[instances]", StringComparison.CurrentCultureIgnoreCase))
    .Skip(1)
    .TakeWhile(line => !string.IsNullOrEmpty(line))
    .Select(line => new {
        Key = line.Split('=')[0],
        Value = line.Split('=')[1]
    });

foreach (var val in vals)
{
    string[] saValues = val.Value.Split(',');
    if (saValues.Length == 4)
    {
        int vtcNum = Convert.ToInt16(saValues[0]);
        int vtcPort = Convert.ToInt16(saValues[1]);
        string vtcName = saValues[2];
        string vtcDescr = saValues[3];
        // 这里处理拆分后的业务数据
    }
}

不过这个方法我还没经过充分测试,暂时不确定健壮性如何,后续可能会遇到格式不规范的情况出问题,但目前能满足我的需求。

想问问大家,有没有更优雅的办法解决ini-parser的重复键问题?或者有没有其他支持重复键的INI解析库推荐?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:38:06