0

0

C# CSV文件读取方法 C#如何读取和解析CSV文件

幻夢星雲

幻夢星雲

发布时间:2026-02-16 09:17:58

|

592人浏览过

|

来源于php中文网

原创

textfieldparser 是 windows forms/.net framework 中最稳妥的内置 csv 解析方案,能正确处理引号、换行符、转义逗号等复杂场景,需启用 hasfieldsenclosedinquotes=true 并调用 readfields()。

c# csv文件读取方法 c#如何读取和解析csv文件

TextFieldParser 读取 CSV 是最稳妥的内置方案

Windows Forms 或 .NET Framework 项目中,Microsoft.VisualBasic.FileIO.TextFieldParser 是唯一能正确处理带引号、换行符、转义逗号等复杂 CSV 场景的原生类。它不依赖第三方包,且对编码(如 UTF-8 BOM)、字段截断、空行有明确行为。

常见错误是直接用 string.Split(',') —— 遇到 "Smith, John",42,"123 Main St\nApt 4" 这类数据会彻底解析错。

  • 必须指定 TextFieldType = FieldType.Delimited 并调用 SetDelimiters(",")
  • 务必启用 HasFieldsEnclosedInQuotes = true,否则引号内逗号无法识别为分隔符的一部分
  • ReadFields() 获取字符串数组,不要用 ReadLine() 后再手动切分
  • 注意:该类位于 Microsoft.VisualBasic.dll,需添加引用(即使项目是 C#)
using Microsoft.VisualBasic.FileIO;
// ...
using (var parser = new TextFieldParser("data.csv"))
{
    parser.TextFieldType = FieldType.Delimited;
    parser.SetDelimiters(",");
    parser.HasFieldsEnclosedInQuotes = true;
    parser.TrimWhiteSpace = true;
<pre class='brush:php;toolbar:false;'>while (!parser.EndOfData)
{
    string[] fields = parser.ReadFields(); // 自动处理引号、换行、转义
    Console.WriteLine(string.Join("|", fields));
}

}

在 .NET Core / .NET 5+ 中优先选 System.Text.Json + 自定义 CSV 解析器

.NET Core 起不再默认包含 TextFieldParser(虽可通过 NuGet 引入 Microsoft.VisualBasic.Core),但更推荐轻量可控的自定义逻辑——尤其当 CSV 结构固定、无嵌套换行时。

关键点不是“能不能读”,而是“怎么避免分配爆炸”和“如何应对空值/类型转换”。比如逐行 Split 后对每个字段调用 int.TryParse 比全加载进 List<string></string> 再批量转换更省内存。

文赋Ai论文
文赋Ai论文

专业/高质量智能论文AI生成器-在线快速生成论文初稿

下载
  • StreamReader 逐行读取,避免一次性 File.ReadAllLines 占满内存
  • 字段去引号逻辑必须手动实现:field.StartsWith("\"") && field.EndsWith("\"") ? field.Substring(1, field.Length-2) : field
  • 若需强类型映射(如转成 Person 对象),建议配合 Span<char></char> 做零分配解析,而非正则或 LINQ
  • 警惕 BOM:UTF-8 文件开头可能有 \xEF\xBB\xBFStreamReader 默认能识别,但自行 FileStream.Read 时要跳过

Microsoft.Data.Analysis.DataFrame 适合分析型场景,但别用于通用解析

如果你的目标是做数据清洗、统计或对接 ML.NET,Microsoft.Data.Analysis 提供了类似 pandas 的 DataFrame 和内置 CSV 加载器。但它会把整张表加载进内存,且列类型推断不可控(比如把全数字 ID 列误判为 int,遇到空值就崩)。

典型报错:System.InvalidOperationException: Unable to convert column 'id' to type Int32 because of invalid value '' at row 123

  • 仅在明确需要后续调用 df.Filterdf.GroupBy 等操作时才引入
  • 必须传入 new DataFrameLoadOptions { HasHeader = true, InferTypes = false } 关闭自动类型推断
  • 列名含空格或特殊字符时,df["User Name"] 可用,但 df.User Name 会编译失败
  • 不支持流式读取,无法处理 GB 级 CSV

第三方库 CsvHelper 的坑比功能还多

CsvHelper 功能强大,但默认行为极易引发静默错误:比如忽略首行标题却不报错、字段数不匹配时悄悄丢弃末尾列、空字符串转 DateTime 直接抛异常而非返回 null

真实项目里,90% 的 “CsvHelper 读不出来” 问题都源于没配 CsvConfiguration

  • 必须显式设置 Configuration.Delimiter = ","Configuration.Quote = '"',不能依赖默认
  • 映射类属性名与 CSV 列名不一致?得用 [Name("user_id")]Map(m => m.UserId).Name("user_id")
  • 空值处理:对可空类型(int?, DateTime?)它能自动跳过,但对 string 字段,空字符串不会被转成 null,得靠 ConvertUsing 手动干预
  • 性能敏感场景慎用:反射绑定 + 大量字符串分配,比手写 Span<char></char> 解析慢 3–5 倍

真正难的从来不是“怎么读”,而是“怎么确保第 100001 行的引号没漏掉、空值没崩、编码没乱、内存没爆”。选方案前,先看你的 CSV 里有没有 "O'Reilly, Inc.", "C# \"Best Practices\"", 2024-04-01 这种数据 —— 有,就老实用 TextFieldParser;没有,手写几行 StreamReader + Span 更省心。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

441

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

321

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

74

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

4

2026.01.31

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

750

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

244

2023.09.22

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.5万人学习

C 教程
C 教程

共75课时 | 4.8万人学习

C++教程
C++教程

共115课时 | 18万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号