在C#中将数据写入CSV文件

问题描述 投票:0回答:2

我正在尝试使用 C# 语言逐行写入

csv
文件。这是我的功能

string first = reader[0].ToString();
string second=image.ToString();
string csv = string.Format("{0},{1}\n", first, second);
File.WriteAllText(filePath, csv);

整个函数在循环内运行,每一行都应写入

csv
文件。就我而言,下一行将覆盖现有行,最后,我在 csv 文件中得到唯一的一条记录,即最后一条记录。如何写入
csv
文件中的所有行?

c# file csv
2个回答
407
投票

更新

在我天真的日子里,我建议手动执行此操作(这是一个简单问题的简单解决方案),但是由于这变得越来越流行,我建议使用库 CsvHelper 来完成所有安全检查等等

CSV 比问题/答案所暗示的要复杂得多。

原答案

由于您已经有一个循环,请考虑这样做:

//before your loop
    var csv = new StringBuilder();

//in your loop
    var first = reader[0].ToString();
    var second = image.ToString();
    //Suggestion made by KyleMit
    var newLine = string.Format("{0},{1}", first, second);
    csv.AppendLine(newLine);  

//after your loop
    File.WriteAllText(filePath, csv.ToString());

或者类似的东西。 我的理由是:您不需要为每个项目写入文件,您只需打开一次流,然后写入它。

可以更换

File.WriteAllText(filePath, csv.ToString());

File.AppendAllText(filePath, csv.ToString());

如果您想将以前版本的 csv 保留在同一文件中

C# 6

如果您使用的是 c# 6.0 那么您可以执行以下操作

var newLine = $"{first},{second}"

编辑

这是一个问题的链接,解释了

Environment.NewLine
的作用。


111
投票

我强烈建议您走更乏味的路线。特别是当您的文件很大时。

using(var w = new StreamWriter(path))
{
    for( /* your loop */)
    {
        var first = yourFnToGetFirst();
        var second = yourFnToGetSecond();
        var line = string.Format("{0},{1}", first, second);
        w.WriteLine(line);
        w.Flush();
    }
}

File.AppendAllText()
打开一个新文件,写入内容,然后关闭该文件。与将数据写入打开的流相比,打开文件是一个消耗大量资源的操作。打开
© www.soinside.com 2019 - 2024. All rights reserved.