CsvHelper文檔-3寫


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();

寫入上下文

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM