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

C#使用CsvHelper读取CSV报Header with name [0] not found错误如何解决

问题根源

从调试输出可以看到,表头行被完整识别为1个列(HeaderRecord仅包含1个元素),原因是CsvHelper默认使用逗号作为分隔符,而你的CSV文件实际使用制表符(Tab,\t)作为列分隔符。之前添加Name、Index特性无效的原因是列未被正确拆分,不存在对应名称/索引的列。

解决方案

修改CsvReader的配置,手动指定分隔符为制表符即可,修改后的代码如下:

using CsvHelper.Configuration;
using System.Globalization;

public static void Main(string[] args)
{
    // 初始化配置,指定分隔符为制表符
    var config = new CsvConfiguration(CultureInfo.InvariantCulture)
    {
        Delimiter = "\t",
        // 处理表头可能存在的前后空格
        PrepareHeaderForMatch = args => args.Header.Trim()
    };

    using (var streamReader = new StreamReader(@"C:\Users\Adam\Desktop\C#\price_detail.csv"))
    {
        using (var csvReader = new CsvReader(streamReader, config))
        {
            // GetRecords返回延迟加载的迭代器,需要调用ToList/遍历才会实际执行读取
            var records = csvReader.GetRecords<SKU>().ToList();
        }
    }
}

public class SKU
{
    public string PriceValueId { get; set; }
    public DateTime Created { get; set; }
    public DateTime Modified { get; set; }
    public string CatalogEntryCode { get; set; }
    public string MarketId { get; set; }
    public string CurrencyCode { get; set; }
    public DateTime ValidFrom { get; set; }
    public DateTime ValidUntil { get; set; }
    public decimal UnitPrice { get; set; }
}

特殊情况处理

如果修改为制表符后仍然无法正常拆分列,说明文件是用多个空格作为分隔符,可替换为以下配置:

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    // 正则匹配多个空格作为分隔符
    Delimiter = @"\s+",
    Mode = CsvMode.RFC4180,
    PrepareHeaderForMatch = args => args.Header.Trim()
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:45:08