C# Programming

C#高效CSV文件写入

Spread the love

逗号分隔值 (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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注