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

使用CsvHelper解析字符串为令牌列表遇文件找不到错误的问询

解决CsvHelper传入字符串却报“文件找不到”的问题

核心问题原因

你的C#代码错误使用了StreamReader的构造函数:StreamReader(string path)是接收文件路径的,而非直接读取字符串内容。当你传入CSV文本时,它会把这段文本当作文件路径去查找,自然触发“文件找不到”的错误。

修正后的C#实现代码

将StreamReader替换为StringReader(专门用于读取字符串的TextReader实现),同时优化字段读取逻辑以适配任意列数:

public int ParseCSVText(string textToParse, string delimiter, out string[] tokens)
{
    var listTokens = new List<string>();
    // 使用StringReader处理字符串内容,而非StreamReader(用于文件读取)
    using (var stringReader = new StringReader(textToParse))
    {
        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            Delimiter = delimiter,
            HasHeaderRecord = false
        };

        using (var reader = new CsvReader(stringReader, config))
        {
            while (reader.Read())
            {
                // 动态遍历当前行的所有字段,避免硬编码索引
                for (int i = 0; i < reader.Context.Record.Length; i++)
                {
                    listTokens.Add(reader.GetField(i));
                }
            }
        }
    }

    tokens = listTokens.ToArray();
    return listTokens.Count;
}

关键优化点说明

  • 替换读取器类型:StringReader是.NET专门为字符串读取设计的类,完美匹配你传入CSV文本的需求,而StreamReader仅用于文件或流的读取。
  • 动态读取字段:原代码硬编码了字段索引(0到4),如果CSV列数变化会直接报错,改用遍历reader.Context.Record.Length的方式可以适配任意列数的CSV行。
  • 简化配置初始化:使用对象初始化器创建CsvConfiguration,代码更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:16:32