TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

使用CsvHelper在.NET中快速读取和写入CSV文件

2025-07-05
/
0 评论
/
2 阅读
/
正在检测是否收录...
07/05

使用CsvHelper在.NET中快速读取和写入CSV文件

在.NET开发中,处理CSV文件是一项常见的需求,尤其是在需要与外部系统进行数据交换或进行批量数据导入导出时。CsvHelper是一个非常流行且功能强大的库,它简化了CSV文件的读写操作。本文将介绍如何使用CsvHelper在.NET中快速进行CSV文件的读取和写入操作。

准备工作

首先,确保你的.NET项目中已经安装了CsvHelper包。如果还没有安装,可以通过NuGet包管理器来安装:

bash Install-Package CsvHelper

或者使用.NET CLI:

bash dotnet add package CsvHelper

创建模型类(可选)

虽然CsvHelper支持直接从Dictionary<string, string>读取和写入数据,但通常更推荐为CSV中的数据定义一个C#模型类,这样可以让数据结构更加清晰,也方便后续的扩展和维护。例如:

csharp public class DataRecord { public string Title { get; set; } public string Keyword { get; set; } public string Description { get; set; } public string Content { get; set; } }

读取CSV文件

1. 基础读取操作

```csharp
using CsvHelper;
using CsvHelper.Configuration;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Globalization; // 用于处理区域信息,例如日期格式等

var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true }; // 配置CSV的头部信息是否为第一行等选项
using (var reader = new StreamReader("pathtoyourcsvfile.csv")) // 指定文件路径
using (var csv = new CsvReader(reader, config)) // 创建CsvReader实例
{
var records = csv.GetRecords().ToList(); // 读取所有记录并转换成List类型列表
// 对records进行操作... 例如:遍历、处理等。
}
```

2. 高级读取操作(带头部过滤)

有时我们可能希望在读取时跳过某些行或列,可以通过配置SkipIgnore实现:

csharp var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, IgnoreHeader = true }; // 忽略头部记录(当知道没有头部或想要跳过时)或使用config.HeaderValidated来处理特定的头部验证逻辑。 using (var reader = new StreamReader("path_to_your_csv_file.csv")) using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<DataRecord>().Where(r => r != null && !string.IsNullOrWhiteSpace(r.Title)).ToList(); // 过滤掉空标题的记录等。 // 对records进行操作... 例如:遍历、处理等。 }

写入CSV文件

1. 基本写入操作:使用对象列表直接写入数据。

```csharp
using CsvHelper; // 注意:为了使代码更简洁,这里假设已经引入了CsvHelper命名空间。
using System.IO; // 同上
using System.Collections.Generic; // 同上

var records = new List // 假设已经准备好了要写入的数据 { new DataRecord { Title = "Example Title", Keyword = "Example Keyword", Description = "Example Description", Content = "Example Content" } }; // ... 可以继续添加更多记录 using (var writer = new StreamWriter("pathtoyouroutputfile.csv")) // 指定输出文件路径 using (var csv = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture))) // 创建CsvWriter实例 { csv.WriteRecords(records); // 将DataRecord列表写入CSV文件 } ### 2. 高级写入操作:动态构建列名和自定义格式化。如果需要在写入时动态设置列名或自定义列的格式化方式,可以使用以下方法:csharp var records = new List<object[]> { new object[] { "Title", "Keyword", "Description", "Content" }, // 表头数据 new object[] { "Example Title", "Example Keyword", "Example Description", "Example Content" } }; // 数据行 using (var writer = new StreamWriter("pathtoyouroutputfilewithcustom_format.csv")) using (var csv = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture))) { csv.WriteHeader<object[]>(); // 写入列头 for (var record in records) { csv.WriteRecord(record); // 写入单条记录 } } ``` 这里通过将每一行作为object[]数组处理,可以灵活地控制列的顺序和格式。 ## 小结 通过上述示例,你可以看到使用CsvHelper在.NET中处理CSV文件是相当直接和简单的。从基础的文件读写到高级的自定义配置和动态数据处理,CsvHelper提供了丰富的API来满足不同的需求。记住,为了确保代码的健壮性,对异常情况进行适当的错误处理也是非常重要的。

朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/31842/(转载时请注明本文出处及文章链接)

评论 (0)