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

读取类INI文件时Write/WriteLine异常及参数解析需求

解决INI格式文件读取的异常问题

看起来你遇到的问题主要来自三个点:

  1. 代码存在语法错误:while块里的大括号嵌套混乱,导致逻辑执行顺序出错
  2. 读取到[section]这类没有=的行时,用Split('=')得到的数组只有1个元素,此时访问values[1]会直接抛出索引越界异常
  3. 如果文件里有空行,inputLine会是空字符串,这时访问inputLine[0]会触发参数越界异常,这也是你尝试Console.Write(inputLine[0])报错的原因

结合你的需求——通过char.IsLetter(inputLine[0])判断行首是否为字母,若是则跳过该行,仅读取键值对参数,这里是修正后的完整代码:

string inputLine;
// 读取文件直到末尾
while ((inputLine = sr.ReadLine()) != null)
{
    // 先跳过空行或全是空白的行,避免访问空字符串索引
    if (string.IsNullOrWhiteSpace(inputLine))
        continue;

    // 按照需求:行首是字母则跳过该行
    if (char.IsLetter(inputLine[0]))
        continue;

    // 可选:如果需要跳过[section]行,可以添加这行判断
    // if (inputLine.StartsWith("["))
    //     continue;

    // 先检查行中是否包含=,避免无=的行引发Split后索引越界
    if (inputLine.Contains("="))
    {
        // 只分割第一个=,避免值里包含=时被错误分割
        string[] values = inputLine.Split(new char[] { '=' }, 2);
        // 确保分割后至少有两个有效元素
        if (values.Length >= 2)
        {
            string param = values[0].Trim(); // 去除参数名前后的空格
            string value = values[1].Trim(); // 去除值前后的空格
            Console.WriteLine($"参数:{param},值:{value}");
        }
    }
}

关键优化说明:

  • 修复语法错误:调整了while块的大括号结构,确保逻辑按预期顺序执行
  • 空行安全处理:用string.IsNullOrWhiteSpace跳过空行或全空白行,彻底避免空字符串索引访问异常
  • 精准分割:给Split方法传入2作为第二个参数,只分割第一个=符号,防止值内容里包含=时被误拆分
  • 多层安全检查:先判断行是否包含=,再执行分割;分割后检查数组长度,确保不会访问不存在的索引
  • 灵活适配需求:保留了你要求的行首字母判断逻辑,同时添加了可选的section行跳过逻辑,你可以根据实际情况开启

这样修改后,不管文件里有没有[section]行、空行,都能安全稳定地读取符合格式的键值对参数了。

内容的提问来源于stack exchange,提问作者Bersekz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:21