小工具知识网

当前位置: 首页 > 行业知识 > C#读取CSV文件的全方位指南:五种方法深度解析与代码实践

行业知识

C#读取CSV文件的全方位指南:五种方法深度解析与代码实践

2026-11-03 18:24:26 来源:互联网转载

当然,为了提供特别详细的描述和包含丰富注释的代码示例,以下是对上述五种读取CSV文件方法的深入讲解及代码展示:

1. StreamReader 和 Split 函数

描述: 此方法是最基本的手动解析CSV文件的方式,利用StreamReader逐行读取文件内容,然后使用String.Split函数以逗号作为分隔符分割每一行数据。

代码与注释:

 

Csharp

using System;using System.IO;public class BasicCSVReader{    ///     /// 使用StreamReader和Split函数读取CSV文件。    ///     /// CSV文件的路径。    public static void ReadCSV(string filePath)    {        // 使用using语句确保StreamReader资源正确释放        using (var reader = new StreamReader(filePath))        {            string line;            // 循环读取文件中的每一行            while ((line = reader.ReadLine()) != null)            {                // 使用Split函数按逗号分隔行内容                string[] fields = line.Split(',');                // 这里可以对分隔后的字段数据进行处理或存储                // 示例:打印每一行的字段                for (int i = 0; i  

2. TextFieldParser 类(Microsoft.VisualBasic.FileIO)

描述: 虽然属于Visual Basic命名空间,但C#项目也可以使用TextFieldParser类。它专为处理固定宽度和分隔符类型的文件设计,提供了更精细的控制,如忽略引号内的分隔符和处理注释行。

代码与注释:

 

Csharp

using Microsoft.VisualBasic.FileIO;using System;public class TextFieldParserCSVReader{    ///     /// 使用TextFieldParser类读取CSV文件。    ///     /// CSV文件的路径。    public static void ReadCSV(string filePath)    {        // 使用using语句确保TextFieldParser资源正确释放        using (TextFieldParser parser = new TextFieldParser(filePath))        {            // 设置解析器处理分隔符类型的文件,并指定分隔符为逗号            parser.TextFieldType = FieldType.Delimited;            parser.SetDelimiters(",");            // 循环读取文件中的每一行数据            while (!parser.EndOfData)            {                // 使用ReadFields方法获取当前行的字段数组                string[] fields = parser.ReadFields();                // 这里可以对分隔后的字段数据进行处理或存储                // 示例:打印每一行的字段                for (int i = 0; i  

3. File.ReadLines 和 LINQ

描述: 结合File.ReadLines方法(返回一个可枚举的行集合)和LINQ查询,可以简洁地处理CSV文件,尤其适合小规模文件或内存受限环境。

代码与注释:

 

Csharp

using System;using System.Collections.Generic;using System.IO;using System.Linq;public class LinqCSVReader{    ///     /// 使用File.ReadLines和LINQ读取CSV文件。    ///     /// CSV文件的路径。    public static IEnumerable ReadCSV(string filePath)    {        // 使用LINQ查询将文件行转换为由逗号分隔的字符串数组的序列        return File.ReadLines(filePath)                   .Select(line => line.Split(','));    }}

使用示例:

 

Csharp

foreach (string[] fields in LinqCSVReader.ReadCSV("path_to_your_csv.csv")){    for (int i = 0; i  

4. DataTable 和 OleDbConnection

描述: 通过ADO.NET的OleDbConnection,可以将CSV文件当作一个数据库表来处理,利用DataTable加载CSV数据。这种方法对于需要与数据库交互或需要将数据绑定到数据绑定控件(如DataGridView)的场景尤为方便。

代码与注释:

 

Csharp

using System.Data;using System.Data.OleDb;using System.IO;public class OleDbCSVReader{    ///     /// 使用OleDbConnection和DataTable将CSV文件数据加载到DataTable中。    ///     /// CSV文件的路径。    /// 包含CSV文件数据的DataTable实例。    public static DataTable ReadCSVToDataTable(string filePath)    {        // 构建连接字符串,指定CSV文件所在目录作为数据源,设置扩展属性以识别CSV文件格式        string connectionString = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Path.GetDirectoryName(filePath)};" +                                 $"Extended Properties='Text;HDR=YES;FMT=Delimited(,)';";        // 查询语句,直接选取CSV文件名作为表名        string query = $"SELECT * FROM [{Path.GetFileName(filePath)}]";        // 使用using语句确保OleDbConnection和OleDbDataAdapter资源正确释放        using (OleDbConnection connection = new OleDbConnection(connectionString))        {            connection.Open();            using (OleDbDataAdapter adapter = new OleDbDataAdapter(query, connection))            {                // 创建一个空的DataTable来接收数据                DataTable dataTable = new DataTable();                // 使用DataAdapter的Fill方法填充DataTable                adapter.Fill(dataTable);                return dataTable;            }        }    }}

使用示例:

 

Csharp

DataTable csvData = OleDbCSVReader.ReadCSVToDataTable("path_to_your_csv.csv");// 现在可以使用csvData进行数据操作或绑定到数据绑定控件

5. 第三方库:CsvHelper

描述: CsvHelper 是一个流行的开源库,提供了强大且灵活的CSV读写功能,包括自动映射到自定义类型、处理复杂嵌套数据、自定义格式化和错误处理等。

代码与注释:

 

Csharp

using CsvHelper;using System;using System.Collections.Generic;using System.IO;public class CsvHelperReader{    ///     /// 使用CsvHelper库读取CSV文件并自动映射到自定义类型列表。    ///     /// 自定义类型,用于映射CSV数据。    /// CSV文件的路径。    /// 包含CSV文件数据的自定义类型列表。    public static List ReadCSVWithCsvHelper(string filePath) where T : class, new()    {        using (var reader = new StreamReader(filePath))        using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))        {            // 自动将CSV数据映射到指定的自定义类型列表            var records = csv.GetRecords().ToList();            return records;        }    }}// 定义对应的自定义类型public class YourCustomType{    public string Column1 { get; set; }    public int Column2 { get; set; }    public DateTime Column3 { get; set; }    // ... 其他属性对应CSV文件中的列}// 使用示例List data = CsvHelperReader.ReadCSVWithCsvHelper("path_to_your_csv.csv");// 现在可以使用data进行数据操作

上一篇:系统服务器异常怎么回事?

下一篇:ip被封怎么连接服务器?