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

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

csv.Flush();

FlushAsync

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

csv.FlushAsync();

NextRecord

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

csv.NextRecord();

NextRecordAsync

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

csv.NextRecordAsync();

写入上下文

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

CsvHelper文档-3写的更多相关文章

  1. CsvHelper文档-1前言

    CsvHelper文档-1前言 英文文档链接地址:CsvHelper Document 开源项目地址:CsvHelper 翻译于2018-1-5,原本可能会随时更新: 每一段代码都是经过我实际测试的, ...

  2. CsvHelper文档-6类型转换

    CsvHelper文档-6类型转换 CsvHelper使用类型转换器来转换string到对象,或者对象到string: ITypeConverter 类型转换器的结构,必须实现: public int ...

  3. CsvHelper文档-5配置

    CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...

  4. CsvHelper文档-4映射

    CsvHelper文档-4映射 类映射 有时候你的类成员和csv的header不一定对应,有时候你的csv文件根本就没有header行,你需要特别制定一个成员的index,你不能依靠.net中默认的顺 ...

  5. CsvHelper文档-2读

    CsvHelper文档-2读 这个库默认不需要做任何设置就可以很容易的使用它.如果你的类属性名称直接匹配csv的标题名称,那么可以按照下面的实例来用: (以下所有的代码都需要引用using csvhe ...

  6. app开发需求文档怎么写

    我们在开发app前都会做需求分析,这个app开发需求文档怎么写呢?一般可以从这几点入手:确定APP方案的目标,APP方案的受众分析,APP开发方案功能设计,APP的操作系统说明方案,APP是是否是原生 ...

  7. document.write 向文档中写内容,包括文本、脚本、元素之类的,但是它在什么时候执行不会覆盖当前页面内容尼?

    当你打开一个页面,浏览器会 调用 document.open() 打开文档 document.write(...) 将下载到的网页内容写入文档 所有内容写完了,就调用 document.close() ...

  8. 用C++向一个txt文档中写数据

    bool CMaked::WriteFileMake(CString filePath, const char *isChange) { ofstream file; //filePath为该txt文 ...

  9. PRD文档怎么写

    昨天学习PMP的相关文档,正好看到里面讲的PRD文档是怎么写的 就把一些学习过程,思维方式,还有用到的工具给记录下来 方便自己以后需要的时候,再去查阅,再读这个教程的时候,我顺便用脑图画了一下 脑图工 ...

随机推荐

  1. JNI由浅入深_9_JNI 异常处理

    1 .本地代码中如何缓存和抛出异常 下面的代码中演示了如何声明一个会抛出异常的本地方法.CatchThrow这个类声明了一个会抛出IllegalArgumentException异常的名叫doit的本 ...

  2. linux下安装swoole扩展

    一.下载swoole 地址:https://github.com/swoole/swoole-src二.将下载好的压缩包放在linux服务器下三.解压压缩包到任意目录 # unzip swoole-s ...

  3. 原生js创建模态框

    1.效果图如下: 2.代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  4. 微服务—熔断器Hystrix

    前言在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与发现的方式互相依赖. 由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服 ...

  5. Oracle 数据库数据结构(包括存储过程,函数,表,触发器等)版本控制器

    原理: 写系统触发器,在修改数据库结构的时候,把DDL写入表中 create sequence A_Ver_Control_seq minvalue nomaxvalue start incremen ...

  6. Linux相关网络命令

    1.简述osi七层模型和TCP/IP四层模型 OSI七层模型 TCP/IP四层模型 2.简述iproute家族命令 ip命令: ip [OPTIONS] OBJECT {COMMAND|help} i ...

  7. MySQL+Service+Servlet+Jsp实现Table表格分页展示数据

    下面以一个示例讲解如何使用MySQL+Service+Servlet+Jsp实现Table表格分页展示数据: eg:请假管理系统 要求如下: 一.打开首页页面, 访问查询请假记录的 servlet , ...

  8. 前端用node+mysql实现简单服务端

    node express + mysql实现简单服务端前端新人想写服务端不想学PHP等后端语言怎么办,那就用js写后台吧!这也是我这个前端新人的学习成果分享,如有那些地方不对,请给我指出. 1.准备工 ...

  9. 轻松解决U盘加密问题

    很多小伙伴常常会遇到这样的问题,比如说有朋友或者同事想借用你的u盘,处于人情世故你又不得不借,但是又不喜欢自己的文件被别人看到或者担心丢失或被修改,在此提供一种给u盘加密或者给u盘里的文件加密的方法. ...

  10. 磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题

    原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...