• CsvHelper文档-3写


    CsvHelper文档-3写

    不用做任何设置,默认的情况下,csvhelper就可以很好的工作了。如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入:

    var records = new List<MyClass> { ... };
    var csv = new CsvWriter( textWriter );
    csv.WriteRecords( records );
    //对应的Stream必须flush一下,否则不会写入
    

    注入警告

    当用外部程序打开一个csv文件的时候,字段的标识可能会包含可执行公式会导致脆弱性。因此,如果一个字段是以 = @ + - 开始,字段将会被设置一个 ,如果字段被引用,那么 将会以”结束(这句话的意思是,在电子表格软件中=开始的会被解释为公式

    =one   -> 	=one
    "=one" -> "	=one"
    

    你可以在设置中关闭这个功能:

    csv.Configuration.SanitizeForInjection = false;
    

    写入所有记录

    最常用的是WriteRecords方法,你可以传递给他一个IEnumerable类型的记录,然后它会写入所有的记录;

    WriteRecords

    var records = new List<MyClass>
    {
        new MyClass { Id = 1, Name = "one" },
        new MyClass { Id = 2, Name = "two" },
    };
    csv.WriteRecords( records );
    
    // Dynamic
    var records = new List<dynamic>();
    dynamic record = new ExpandoObject();
    record.Id = 1;
    record.Name = "one";
    records.Add( record );
    csv.WriteRecords( records );
    
    // Anonymous
    var records = new List<object>
    {
        new { Id = 1, Name = "one" },
        new { Id = 2, Name = "two" },
    };
    csv.WriteRecords( records );
    //这里必须对csv进行关闭或者dispose,csv会自动关闭textwriter,从而将缓冲区的数据真实写入文件
    //要么就得调用对writer的flush处理
    

    写入一个单独的记录

    有时候你会想要一个一个写入每个记录,每当结束几行的写入的时候,不要忘记调用NextRecord来flush数据和写入行结尾。

    WriteHeader

    写入Header记录,你可以在任何行使用这个方法,可以写入多个Header.

    csv.WriteHeader<MyClass>();
    csv.WriteHeader( Type type );
    csv.NextRecord();
    

    WriteRecord

    写入记录

    var record = new MyClass { Id = 1, Name = "one" };
    csv.WriteRecord( record );
    csv.NextRecord();
    
    // Dynamic
    dynamic record = new ExpandoObject();
    record.Id = 1;
    record.Name = "one";
    csv.WriteRecord( record );
    csv.NextRecord();
    
    // Anonymous
    var record = new { Id = 1, Name = "one" };
    csv.WriteRecord( record );
    csv.NextRecord();
    

    写入字段

    可以单独写入每个字段

    WriteField

    写入一个字段的类型,你可以使用你自己的ITypeConverter来处理类型到String的转换,如果现有的converter没有合适的类型。

    // Write a string
    csv.WriteField( "field" );
    
    // Write a string passing in a value indicating
    // if the field should be quoted. This will ignore
    // any configuration and only quote based on the
    // shouldQuote parameter passed in.
    csv.WriteField( "field", true );
    
    // Write any type
    csv.WriteField( 1 );
    
    // Write any type and use the given type converter
    // to convert the type to a string.
    csv.WriteField( value, myTypeConverter );
    
    // Write any type and use the given type converter
    // to convert the type to a string.
    csv.WriteField<MyTypeConverter>( value );
    
    // Write a field that has already been converted
    // by a type converter. If the field is null, it
    // won't get written.
    csv.WriteConvertedField( "field" );
    
    // Don't forget to forget to end the row.
    csv.NextRecord();
    

    WriteComment

    这个方法将会使用Configuration.Comment中的Comment字符来写入文本。

    结束一行

    当你结束写入一行的时候,你需要flush一下字段,重新开始一个新行,Flushing和开始一个新行是分开的,所以你可以在没有开始新行的时候就Flush,调用NextRecord就会自动为你Flush。

    Flush

    这个方法会序列化字段到TextReaderTextWriter。

    csv.Flush();
    

    FlushAsync

    异步序列化字段到TextReaderTextWriter,如果TextReaderTextWriter连接的是网络或者其他慢速地写入,异步执行会是个好主意。

    csv.FlushAsync();
    

    NextRecord

    结束当前记录开始新的记录,调用Flush,然后写入新行。

    csv.NextRecord();
    

    NextRecordAsync

    异步结束当前记录开始新的记录,调用FlushAsync,然后异步写入新行。

    csv.NextRecordAsync();
    

    写入上下文

    和之前读的部分相同,所以略。

  • 相关阅读:
    poj-2888-矩阵+polya
    hdu-2865-polya+dp+矩阵+euler函数
    poj-2154-polya+euler函数
    poj-1026-置换
    poj-2369-置换
    2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller
    2017.2.13 开涛shiro教程-第十二章-与Spring集成(二)shiro权限注解
    2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解
    2017.2.12 开涛shiro教程-第八章-拦截器机制
    2017.2.12 开涛shiro教程-第七章-与Web集成
  • 原文地址:https://www.cnblogs.com/newlifechou/p/8214217.html
Copyright © 2020-2023  润新知