C#使用csvhelper實現(xiàn)csv的基本操作
新建控制臺項目
安裝csvhelper 33.0.1
寫入csv
新建Foo.cs
namespace CsvSut02; public class Foo { public int Id { get; set; } public string Name { get; set; } }
批量寫入
using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { List<Foo> foos = new List<Foo>(); for (int i = 0; i < 100; i++) { foos.Add(new Foo() { Id = i, Name = "我是" + i }); } var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv"; using (var writer = new StreamWriter(fileName)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); using (var csv = new CsvWriter(writer, config)) { csv.WriteRecords(foos); } } } }
逐條寫入
using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { List<Foo> foos = new List<Foo>(); for (int i = 0; i < 100; i++) { foos.Add(new Foo() { Id = i, Name = "我是" + i }); } var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv"; using (var writer = new StreamWriter(fileName)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); using (var csv = new CsvWriter(writer, config)) { //這里看過來 foreach (var foo in foos) { csv.WriteRecord(foo); csv.NextRecord(); } } } } }
增加標題
特性方式
using CsvHelper.Configuration.Attributes; namespace CsvSut02; public class Foo { [Name("Id")] public int Id { get; set; } [Name("Name")] public string Name { get; set; } } using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { List<Foo> foos = new List<Foo>(); for (int i = 0; i < 100; i++) { foos.Add(new Foo() { Id = i, Name = "我是" + i }); } var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv"; using (var writer = new StreamWriter(fileName)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); using (var csv = new CsvWriter(writer, config)) { csv.WriteHeader<Foo>(); csv.NextRecord(); foreach (var foo in foos) { csv.WriteRecord(foo); csv.NextRecord(); } } } } }
配置類
新建FooClassMap.cs
using CsvHelper.Configuration; namespace CsvSut02; public class FooClassMap : ClassMap<Foo> { public FooClassMap() { Map(m => m.Id) .Index(0) .Name("id"); Map(m => m.Name) .Index(1) .Name("name"); } }
修改Program.cs
using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { List<Foo> foos = new List<Foo>(); for (int i = 0; i < 100; i++) { foos.Add(new Foo() { Id = i, Name = "我是" + i }); } var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv"; using (var writer = new StreamWriter(fileName)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); using (var csv = new CsvWriter(writer, config)) { csv.Context.RegisterClassMap<FooClassMap>(); csv.WriteHeader<Foo>(); csv.NextRecord(); foreach (var foo in foos) { csv.WriteRecord(foo); csv.NextRecord(); } } } } }
可能有人覺得麻煩,使用配置類可以保證原始類的純粹,保證poco
讀取csv
讀取和寫入一樣,可以兩種方式實現(xiàn)一個是配置類一個是特性,下面都以特性演示
無標題csv
using CsvHelper.Configuration.Attributes; namespace CsvSut02; public class Foo { [Index(0)] public int Id { get; set; } [Index(1)] public string Name { get; set; } } using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { var file = "2024_07_24_18_24_00.csv"; using (var reader = new StreamReader(file)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); config.HasHeaderRecord = false;//沒有頭部 using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<Foo>().ToList(); foreach (var record in records) { Console.WriteLine(record.Id); } } } } }
有標題csv
using CsvHelper.Configuration.Attributes; namespace CsvSut02; public class Foo { [Name("id")] public int Id { get; set; } [Name("name")] public string Name { get; set; } } using CsvHelper.Configuration.Attributes; namespace CsvSut02; public class Foo { [Name("id")] public int Id { get; set; } [Name("name")] public string Name { get; set; } } using System.Globalization; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { var file = "2024_07_24_18_30_49.csv"; using (var reader = new StreamReader(file)) { var config = new CsvConfiguration(CultureInfo.InvariantCulture); config.HasHeaderRecord = true;//有頭部 using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<Foo>().ToList(); foreach (var record in records) { Console.WriteLine(record.Id); } } } } }
增量寫入
using System.Globalization; using System.Text; using CsvHelper; using CsvHelper.Configuration; namespace CsvSut02; class Program { static void Main(string[] args) { var fileName = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}.csv"; WriteModelWithAppend(fileName); WriteModelWithAppend(fileName); } /// <summary> /// 追加方式寫入 /// </summary> /// <param name="fileName"></param> static void WriteModelWithAppend(string fileName) { var model = new Foo(); model.Id = 1; model.Name = "測試"; // 檢查文件是否存在,以確定是否應該以追加模式打開 var mode = File.Exists(fileName) ? FileMode.Append : FileMode.Create; var config = new CsvConfiguration(CultureInfo.InvariantCulture); using var writer = new StreamWriter(new FileStream(fileName, mode, FileAccess.Write, FileShare.Read), Encoding.UTF8); using var csv = new CsvWriter(writer, config); if (mode == FileMode.Create) { csv.WriteHeader<Foo>(); csv.NextRecord(); } csv.WriteRecord(model); csv.NextRecord(); } }
注意多線程有問題需要加鎖
以上就是C#使用csvhelper實現(xiàn)csv的基本操作的詳細內(nèi)容,更多關于C# csvhelper實現(xiàn)csv操作的資料請關注腳本之家其它相關文章!
相關文章
C#自動創(chuàng)建數(shù)據(jù)庫實現(xiàn)代碼
C#下創(chuàng)建數(shù)據(jù)庫的代碼2008-03-03C# OpenCvSharp實現(xiàn)去除字母后面的雜線
這篇文章主要為大家詳細介紹了C#如何使用OpenCvSharp實現(xiàn)去除字母后面的雜線效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-11C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中
這篇文章介紹了C#將DataGridView中的數(shù)據(jù)保存到CSV和Excel中的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04C#程序連接數(shù)據(jù)庫及讀取數(shù)據(jù)庫中字段的簡單方法總結
包括C#連接Access、Oracle或者SQL Server,這里整理了一些C#連接數(shù)據(jù)庫及從讀取數(shù)據(jù)庫中字段的簡單方法總結,需要的朋友可以參考下2016-05-05