C# 使用CsvHelper强制LF线路端点

C# 使用CsvHelper强制LF线路端点,c#,asp.net,csv,line-endings,csvhelper,C#,Asp.net,Csv,Line Endings,Csvhelper,如果我有一些LF转换(使用N++)的CSV文件,每次我使用JoshClose的CsvHelper向它们写入数据时,行尾都会返回到CRLF 由于SQL Server中的CLRFROWTERMINATORS存在问题,因此我希望保留行结尾,如文件的初始状态 在区域性设置中找不到它,我编译了自己版本的库 如何继续?据我所知,线路终端不受CvsHelper控制。我通过调整传递给CsvWriter的文件编写器使其正常工作 TextWriter tw = File.CreateText(filepathnam

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

由于SQL Server中的CLRF
ROWTERMINATORS
存在问题,因此我希望保留行结尾,如文件的初始状态

在区域性设置中找不到它,我编译了自己版本的库


如何继续?

据我所知,线路终端不受CvsHelper控制。我通过调整传递给CsvWriter的文件编写器使其正常工作

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

可能对某人有用:

    public static void AppendToCsv(ShopDataModel shopRecord)
    {
        using (var writer = new StreamWriter(DestinationFile, true))
        {
            using (var csv = new CsvWriter(writer))
            {
                csv.WriteRecord(shopRecord);
                writer.Write("\n");
            }
        }
    }

从CsvHelper13.0.0开始,通过
换行符
配置属性

例如:

使用CsvHelper;
使用CsvHelper.配置;
利用制度全球化;
void Main()
{
使用(var writer=newstreamwriter(@“my file.csv”))
{
使用(var csv=new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.Configuration.HasHeaderRecord=false;

csv.Configuration.NewLine=NewLine.LF;//使用CsvHelper时缺少或不正确的
NewLine
字符是一个简单但文档不完整的解决方案的常见问题。此问题的其他答案是正确的,但缺少一个重要细节

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

// 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;
然而,许多人都被这样一个事实绊倒了:(根据设计)
CsvWriter
在使用
CsvWriter.WriteHeader()
编写标头时,或者在使用
CsvWriter.WriteRecord()编写单个记录时,都不会发出任何换行符
。原因是您可以编写附加的标题元素或附加的记录元素,就像您的标题和行数据来自两个或多个类而不是单个类时所做的那样

CsvWriter在调用
CsvWriter.NextRecord()
时,确实会发出定义类型的换行符,作者JoshClose表示,在处理完标题和使用
WriteRecord
添加的每一行之后,应该调用
NextRecord()

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


在我看来,这应该有更好的文档记录,但它确实存在。

这在记录之间有效,但你能在标题和第一条记录之间得到一条换行吗?@RickyTad我不确定我是否理解你的问题。上面的示例代码在写标题后插入了一条新行:
header\nrecord1\nrecord2
etcIt的2020和CsvHelper的文档仍然缺乏重要信息和各种样本。如果使用CsvWriter.WriterRecord(),我面临的问题是标题和内容在一行上。CsvWriter.NextRecord()解决了这个问题!多亏了你,再也没有脑细胞会因为它而死亡:)更让人困惑的是,CsvWriter.Flush()状态
将该行序列化到TextWriter。
,这似乎表明该行已完成。如果此方法信息提示您应该调用
NextRecord()
来编写换行符,这将非常有用。
// 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;