技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

11示例教你用C# .NET CsvHelper讀寫CSV文件(2)

作者:admin    時間:2023-5-19 17:2:56    瀏覽:

在前一文中,我用7個示例介紹了 C# .NET CsvHelper 讀取CSV文件的各種方法,由于篇幅有限,上文沒有介紹CsvHelper如何寫CSV文件,這將在本文重點介紹。

注入警告

在外部程序中打開 CSV 時,可能會運行包含漏洞的字段中的公式。由于這個問題,有一個InjectionOptions可以配置的設(shè)置。

要檢測的注入字符列表是可配置的CsvConfiguration.InjectionCharacters ,默認為=@, +, -\t, \r。注入字符可以是字段或引用字段的第一個字符。即=foo"=foo"。

InjectionOptions值為None(默認值)、Escape、StripException

none

沒有采取注入保護。

Exception

如果檢測到注入字符,則拋出一個CsvWriterException

Strip

字段開頭的所有注入字符都將被刪除,===foo將被剝離到foo

Escape

如果檢測到注入字符,該字段將默認用 InjectionEscapeCharacter 裝作為',如果該字段尚未被引用,則該字段將被引用。

=one->"'=one"

"=one"->"'=one"

=one"two->"'=one""two"

默認情況下禁用此選項,如果你要存儲用戶輸入的數(shù)據(jù),但你自己沒有清理,并且你要讓可能在 Excel/Sheets/etc 中打開的人訪問它,你可以考慮啟用此功能。讀取時不會刪除InjectionEscapeCharacter。

編寫時,你可以拋出一個可枚舉的類對象、動態(tài)對象、匿名類型對象或幾乎任何其他對象,它就會被寫入。

編寫類對象

例子

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

編寫動態(tài)對象

例子

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

附加到現(xiàn)有的 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

總結(jié)

本文重點介紹了C# .NET CsvHelper 寫入CSV文件的各種方法。如果你要讀CSV文件,請參閱上一篇文章:

相關(guān)文章

標簽: asp.net  CSharp  CSV  CsvHelper  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */