CsvHelper文档-3写
不用做任何设置,默认的情况下,csvhelper就可以很好的工作了。如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入:
var records = new List<MyClass> { ... }; var csv = new CsvWriter( textWriter ); csv.WriteRecords( records ); //对应的Stream必须flush一下,否则不会写入
注入警告
当用外部程序打开一个csv文件的时候,字段的标识可能会包含脆弱性。因为此, 如果一个字段是以=@+- ,字段将会被预置一个\t,如果字段被引用,那么\t将会以”结束( 这句话的意思是,在电子表格软件中=开始的会被解释为公式 )
=one -> \t=one "=one" -> "\t=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
这个方法会序列化字段到
TextWriter。
csv.Flush();
FlushAsync
异步序列化字段到
TextWriter,如果
TextWriter连接的是网络或者其他慢速地写入,异步执行会是个好主意。
csv.FlushAsync();
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。