11示例教你用C# .NET CsvHelper读写CSV文件(2)
作者:admin 时间:2023-5-19 17:2:56 浏览:在前一文中,我用7个示例介绍了 C# .NET CsvHelper 读取CSV文件的各种方法,由于篇幅有限,上文没有介绍CsvHelper如何写CSV文件,这将在本文重点介绍。
注入警告
在外部程序中打开 CSV 时,可能会运行包含漏洞的字段中的公式。由于这个问题,有一个InjectionOptions
可以配置的设置。
要检测的注入字符列表是可配置的CsvConfiguration.InjectionCharacters
,默认为=
, @
, +
, -
, \t
, \r
。注入字符可以是字段或引用字段的第一个字符。即=foo
或"=foo"
。
InjectionOptions
值为None
(默认值)、Escape
、Strip
和Exception
。
none
没有采取注入保护。
Exception
如果检测到注入字符,则抛出一个CsvWriterException
。
Strip
字段开头的所有注入字符都将被删除,===foo
将被剥离到foo
。
Escape
如果检测到注入字符,该字段将默认用 InjectionEscapeCharacter
装作为'
,如果该字段尚未被引用,则该字段将被引用。
=one
->"'=one"
"=one"
->"'=one"
=one"two
->"'=one""two"
默认情况下禁用此选项,如果你要存储用户输入的数据,但你自己没有清理,并且你要让可能在 Excel/Sheets/etc 中打开的人访问它,你可以考虑启用此功能。读取时不会删除InjectionEscapeCharacter
。
编写时,你可以抛出一个可枚举的类对象、动态对象、匿名类型对象或几乎任何其他对象,它就会被写入。
编写类对象
例子
void Main()
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "one" },
};
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
输出
Id,Name
1,one
编写动态对象
例子
void Main()
{
var records = new List<dynamic>();
dynamic record = new ExpandoObject();
record.Id = 1;
record.Name = "one";
records.Add(record);
using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
writer.ToString().Dump();
}
}
输出
Id,Name
1,one
编写匿名类型对象
例子
void Main()
{
var records = new List<object>
{
new { Id = 1, Name = "one" },
};
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
}
输出
Id,Name
1,one
附加到现有的 CSV 文件
例子
void Main()
{
var records = new List<Foo>
{
new Foo { Id = 1, Name = "one" },
};
// Write to a file.
using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
csv.WriteRecords(records);
}
records = new List<Foo>
{
new Foo { Id = 2, Name = "two" },
};
// Append to the file.
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
// Don't write the header again.
HasHeaderRecord = false,
};
using (var stream = File.Open("path\\to\\file.csv", FileMode.Append))
using (var writer = new StreamWriter(stream))
using (var csv = new CsvWriter(writer, config))
{
csv.WriteRecords(records);
}
}
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
输出
Id,Name
1,one
2,two
总结
本文重点介绍了C# .NET CsvHelper 写入CSV文件的各种方法。如果你要读CSV文件,请参阅上一篇文章:
相关文章
- 站长推荐