使用CsvHelper在C#中写入文件

27

我尝试使用C#中的CsvHelper将内容写入CSV文件。


这是该库的链接http://joshclose.github.io/CsvHelper/

我使用了网站上的代码。

以下是我的代码:

var csv = new CsvWriter(writer);
csv.Configuration.Encoding = Encoding.UTF8;
foreach (var value in valuess)
{
    csv.WriteRecord(value);
}

它仅将部分数据写入CSV文件。
最后几行丢失了。
请帮忙解决这个问题。


1
你能展示更多的代码吗?特别是writer的声明很有趣。 - Markus
当我在循环代码后添加了这段代码,程序运行良好。writer.Close(); - Nayana Priyankara
4个回答

43

你需要刷新流。当 Using 语句超出范围时会自动刷新。

using (TextWriter writer = new StreamWriter(@"C:\test.csv", false, System.Text.Encoding.UTF8))
{
    var csv = new CsvWriter(writer);
    csv.WriteRecords(values); // where values implements IEnumerable
}

10
当我在循环代码后添加了这段代码,代码就可以正常工作了。
var csv = new CsvWriter(writer);
csv.Configuration.Encoding = Encoding.UTF8;
foreach (var value in valuess)
{
     csv.WriteRecord(value);
}
writer.Close();

问题出现是因为我没有关闭连接。

13
你应该使用“using”来释放你的写入器,这是一个好的做法。 using (var writer = new StreamWriter(filepath)) { ... } - Laymain
从CSVHelper 13.0.0开始,Factory.CreateWriter中有重大变更。 https://joshclose.github.io/CsvHelper/change-log - Kuroro
那ANSI - Windows-1252呢? - Kiquenet

8
假设writer是某种TextWriter,您应该在关闭writer之前添加一次flush内容的调用:
writer.Flush()

如果缺少最后一行,这很可能是原因。

当我在循环代码后添加了这段代码,程序运行良好。writer.Close(); - Nayana Priyankara

2

补充@greg的回答:

using (var sr = new StreamWriter(@"C:\out.csv", false, Encoding.UTF8)) {
  using (var csv = new CsvWriter(sr)) {
    csv.WriteRecords(values);
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接