using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace XImaging.Automation.Library.HxDriverLib.Files { public class CsvFile { private FileStream fs; StreamWriter sw; public CsvFile(string fullFileName) { this.fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); this.sw = new StreamWriter(fs, System.Text.Encoding.Default); } public void Append(DataTable dt) { string data = ""; //写出列名称 for (int i = 0; i < dt.Columns.Count; i++) { data += dt.Columns[i].ColumnName.ToString(); if (i < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); //写出各行数据 for (int i = 0; i < dt.Rows.Count; i++) { data = ""; for (int j = 0; j < dt.Columns.Count; j++) { data += dt.Rows[i][j].ToString(); if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } } public void Append(string line) { sw.WriteLine(line); } public void Append(params string[] value) { string data = ""; //写出列名称 for (int i = 0; i < value.Length; i++) { data += value[i]; if (i < value.Length - 1) { data += ","; } } sw.WriteLine(data); } public void AppendLine() { sw.WriteLine(); } public void Save() { this.sw.Close(); this.fs.Close(); } } public class CsvHelper { public static DataTable ReadFile(string fullFileName, int firstRow=0, int firstColumn=0, bool haveTitleRow=true) { DataTable dt = new DataTable(); FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default); //记录每次读取的一行记录 string strLine = ""; //记录每行记录中的各字段内容 string[] aryLine; //标示列数 int columnCount = 0; //是否已建立了表的字段 bool bCreateTableColumns = false; //第几行 int iRow = 1; //去除无用行 if (firstRow > 0) { for (int i = 1; i < firstRow; i++) { sr.ReadLine(); } } string[] separators = { "," }; //逐行读取CSV中的数据 while ((strLine = sr.ReadLine()) != null) { strLine = strLine.Trim(); aryLine = strLine.Split(separators, System.StringSplitOptions.RemoveEmptyEntries); if (bCreateTableColumns == false) { bCreateTableColumns = true; columnCount = aryLine.Length; //创建列 for (int i = firstColumn; i < columnCount; i++) { DataColumn dc = new DataColumn(haveTitleRow == true ? aryLine[i] : "COL" + i.ToString()); dt.Columns.Add(dc); } bCreateTableColumns = true; if (haveTitleRow == true) { continue; } } DataRow dr = dt.NewRow(); for (int j = firstColumn; j < columnCount; j++) { dr[j - firstColumn] = aryLine[j]; } dt.Rows.Add(dr); iRow = iRow + 1; } sr.Close(); fs.Close(); return dt; } public static void SaveFile(DataTable dt, string fullFileName) { FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); string data = ""; //写出列名称 for (int i = 0; i < dt.Columns.Count; i++) { data += dt.Columns[i].ColumnName.ToString(); if (i < dt.Columns.Count - 1) { data += ", "; } } sw.WriteLine(data); //写出各行数据 for (int i = 0; i < dt.Rows.Count; i++) { data = ""; for (int j = 0; j < dt.Columns.Count; j++) { data += dt.Rows[i][j].ToString(); if (j < dt.Columns.Count - 1) { data += ", "; } } sw.WriteLine(data); } sw.Close(); fs.Close(); } } }