技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

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(默认值)、EscapeStripException

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文件,请参阅上一篇文章:

相关文章

标签: asp.net  CSharp  CSV  CsvHelper  
x
  • 站长推荐
/* 左侧显示文章内容目录 */