使用CsvHelper强制执行LF行结尾

use*_*494 6 c# csv asp.net line-endings csvhelper

如果我有一些LF转换(使用N ++)CSV文件,每次我使用JoshClose将数据写入它们时CsvHelper,行结尾将返回CRLF.

由于我ROWTERMINATORS在SQL Server 中遇到CLRF问题,所以我要保持我的行结尾像文件的初始状态.

无法在文化设置中找到它,我编译自己的库版本.

如何进行?

Cra*_*ied 10

Newline使用 CsvHelper 时缺少或不正确的字符是一个简单但文档不足的解决方案的常见问题。此 SO 问题的其他答案是正确的,但缺少一个重要细节。

配置允许您从四个可用选项中进行选择:

// Pick one of these alternatives
CsvWriter.Configuration.NewLine = NewLine.CR;   
CsvWriter.Configuration.NewLine = NewLine.LF;
CsvWriter.Configuration.NewLine = NewLine.CRLF;
CsvWriter.Configuration.NewLine = NewLine.Environment;
Run Code Online (Sandbox Code Playgroud)

然而,很多人都绊倒的事实,(设计)CsvWriter,当您使用写头不发出任何换行符CsvWriter.WriteHeader(),也不当你写使用单记录CsvWriter.WriteRecord()。原因是您可以编写额外的标题元素或额外的记录元素,就像您在标题和行数据来自两个或多个类而不是来自单个类时所做的那样。

当您调用 时,CsvWriter确实会发出定义的换行符类型,CsvWriter.NextRecord()作者 JoshClose 指出您应该NextRecord()在完成标题后以及使用WriteRecord. 参见 GitHub 问题列表 929

当您使用WriteRecords()CsvWriter编写多条记录时,会在每条记录的末尾自动发出已定义类型的换行符。

在我看来,这应该有更好的记录,但它就是这样。

  • 现在已经是 2020 年了,CsvHelper 的文档仍然缺乏重要信息和各种示例。如果使用 CsvWriter.WriteRecord(),我遇到了同样的问题,标题和内容位于一行。CsvWriter.NextRecord() 解决了它!感谢您,不再有脑细胞因此而死亡:) (2认同)

Bri*_*oth 8

据我所知,行终止符不受CvsHelper控制.我通过调整传递给CsvWriter的文件编写器来实现它.

TextWriter tw = File.CreateText(filepathname);
tw.NewLine = "\n";
CsvWriter csvw = new CsvWriter(tw);
csvw.WriteRecords(records);
csvw.Dispose();
Run Code Online (Sandbox Code Playgroud)