c#读取csv数据
时间: 2025-08-16 14:08:31 浏览: 7
在 C# 中读取 CSV 文件数据有多种方法,可以根据具体需求选择合适的方式。以下是几种常见且实用的方法,涵盖基础类库和第三方库的使用。
### 使用 `StreamReader` 和 `Split` 方法
这是最基础的方式,适用于简单的 CSV 文件格式,不需要复杂的解析逻辑。
```csharp
using System;
using System.IO;
public class BasicCSVReader
{
public static void ReadCSV(string filePath)
{
using (var reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] fields = line.Split(',');
for (int i = 0; i < fields.Length; i++)
{
Console.WriteLine($"Field {i + 1}: {fields[i]}");
}
}
}
}
}
```
这种方法适用于简单的 CSV 文件,但对包含逗号、引号等特殊字符的数据支持较弱[^3]。
---
### 使用 `CsvHelper` 库
`CsvHelper` 是一个功能强大的第三方库,能够轻松处理复杂的 CSV 文件结构,包括映射到类对象、处理不同格式的字段等。
```csharp
using System;
using System.Globalization;
using System.IO;
using CsvHelper;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
class Program
{
static void Main()
{
string filePath = "path/to/your/file.csv";
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var records = csv.GetRecords<Person>();
foreach (var record in records)
{
Console.WriteLine($"Name: {record.Name}, Age: {record.Age}, Email: {record.Email}");
}
}
}
}
```
此方法特别适合需要将 CSV 数据映射到强类型对象的情况,并且支持字段名称不一致的情况,只需在类中使用属性映射即可[^2]。
---
### 使用 `TextFieldParser` 类
`TextFieldParser` 是 `Microsoft.VisualBasic.FileIO` 命名空间中的一个类,尽管属于 VB.NET 的一部分,但在 C# 中也可以使用,尤其适合处理包含引号、特殊分隔符等复杂格式的 CSV 文件。
```csharp
using Microsoft.VisualBasic.FileIO;
using System;
private void ReadCSVFile(string strCsvFilePath)
{
using (TextFieldParser csvReader = new TextFieldParser(strCsvFilePath, System.Text.Encoding.GetEncoding("gb2312")))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
csvReader.TrimWhiteSpace = true;
while (!csvReader.EndOfData)
{
string[] arrayLine = csvReader.ReadFields();
// 处理 arrayLine 中的每行数据
foreach (var field in arrayLine)
{
Console.WriteLine(field);
}
}
}
}
```
此方法在处理中文编码、引号包裹字段等复杂情况时表现良好,且性能稳定[^4]。
---
### 使用 LINQ 和 `File.ReadLines`
如果你希望结合 LINQ 进行更灵活的数据处理,可以使用 `File.ReadLines` 配合 `Select` 和 `Split` 来实现。
```csharp
using System;
using System.IO;
using System.Linq;
public class LinqCSVReader
{
public static void ReadCSV(string filePath)
{
var lines = File.ReadLines(filePath);
var data = lines.Select(line => line.Split(','));
foreach (var row in data)
{
Console.WriteLine(string.Join(", ", row));
}
}
}
```
这种方法适合对数据进行流式处理,并结合 LINQ 进行筛选、排序等操作[^1]。
---
### 总结
- **简单 CSV 文件**:使用 `StreamReader` + `Split` 是快速实现读取的方案。
- **结构化数据映射**:推荐使用 `CsvHelper`,它支持类映射和复杂格式解析。
- **复杂格式处理**:`TextFieldParser` 是处理特殊字符、引号、编码等问题的首选。
- **灵活数据操作**:结合 `File.ReadLines` 和 LINQ 可以实现更灵活的数据处理逻辑。
根据具体需求选择合适的方法,可以有效提高开发效率和代码可维护性。
---
阅读全文
相关推荐



















