逗号分隔值 (CSV) 文件是用于存储表格数据的普遍格式。其简单性使其易于访问,但以编程方式处理它们需要仔细考虑。本文探讨了在 C# 中将数据写入 CSV 文件的两种不同方法:利用强大的CsvHelper
库和使用内置的File.WriteAllText()
方法。每种方法都具有独特的优势,最佳选择取决于数据的复杂性和项目需求。
目录
使用 CsvHelper 写入 CSV
CsvHelper
库为在 C# 中处理 CSV 文件提供了一个强大而灵活的解决方案。它对引号、转义和各种分隔符的有效管理使其成为处理复杂数据集的理想选择。首先通过您首选的包管理器(例如,Visual Studio 中的 NuGet 包管理器)安装CsvHelper
NuGet 包。
using CsvHelper;
using CsvHelper.Configuration;
using System;
using System.Globalization;
using System.IO;
using System.Collections.Generic;
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public class CsvHelperExample
{
public static void Main(string[] args)
{
List<Person> people = new List<Person>()
{
new Person { FirstName = "John", LastName = "Doe", Age = 30 },
new Person { FirstName = "Jane", LastName = "Doe", Age = 25 },
new Person { FirstName = "Peter", LastName = "Jones", Age = 40 }
};
string filePath = "output.csv";
using (var writer = new StreamWriter(filePath))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(people);
}
Console.WriteLine($"数据已写入 {filePath}");
}
}
此示例展示了将Person
对象列表写入 CSV 文件的简单性。CultureInfo.InvariantCulture
确保无论系统设置如何都能保持一致的格式。using
语句保证了正确的资源释放。
使用 WriteAllText() 写入 CSV
对于较小、不太复杂的数据集,File.WriteAllText()
方法提供了一种直接的方法。但是,此方法需要手动处理逗号和引号,这在字段内包含这些字符的数据中会变得很麻烦。
using System;
using System.IO;
using System.Text;
public class WriteAllTextExample
{
public static void Main(string[] args)
{
string[,] data = {
{"FirstName", "LastName", "Age"},
{"John", "Doe", "30"},
{"Jane", "Doe", "25"},
{"Peter", "Jones", "40"}
};
StringBuilder csvBuilder = new StringBuilder();
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
csvBuilder.Append(data[i, j]);
if (j < data.GetLength(1) - 1)
{
csvBuilder.Append(",");
}
}
csvBuilder.AppendLine();
}
string filePath = "output_simple.csv";
File.WriteAllText(filePath, csvBuilder.ToString());
Console.WriteLine($"数据已写入 {filePath}");
}
}
此代码手动构造 CSV 字符串并将其写入文件。虽然在简单情况下有效,但它缺乏CsvHelper
在复杂数据方面的鲁棒性,需要大量处理特殊字符以防止数据损坏。
选择正确的方法
这两种方法的选择完全取决于项目的具体需求。对于大型或复杂的数据集(字段中可能包含特殊字符),强烈推荐使用CsvHelper
,因为它具有强大的错误处理和高效的数据管理功能。对于非常简单的数据集,File.WriteAllText()
可能就足够了,但是必须仔细考虑其局限性。请记住,始终包含适当的错误处理(例如,try-catch
块)以在生产环境中管理潜在的异常,例如IOException
。