C#開發小試手----小功能:csv檔案儲存
阿新 • • 發佈:2018-12-20
需求:將頁面dataGridView裡的表格存入本地csv檔案
本例的dataGridView裡的資料由於已經存在DataTable中,故直接出用即可。
1.建立表頭
由於DataTable,未將表頭存入,故在此進行表頭的定義。
public void CreateCSV_Head(string CSV_Head, string fullPath) { //定義csv表格的表頭 System.IO.FileInfo fi = new System.IO.FileInfo(fullPath); if (!fi.Directory.Exists) { fi.Directory.Create(); } System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Append, System.IO.FileAccess.Write); System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.Default); sw.WriteLine(CSV_Head); sw.Close(); fs.Close(); }
2.儲存表格
檔案流的System.IO.FileMode.Append屬性表示檔案讀寫的追加
public void SaveCSV(DataTable dt, string fullPath)//FTA資料寫入csv { System.IO.FileInfo fi = new System.IO.FileInfo(fullPath); if (!fi.Directory.Exists) { fi.Directory.Create(); } System.IO.FileStream fs = new System.IO.FileStream(fullPath, System.IO.FileMode.Append, System.IO.FileAccess.Write); System.IO.StreamWriter sw = new System.IO.StreamWriter(fs, System.Text.Encoding.Default); //定義csv表格的前兩個欄位 for (int i = 0; i < dt.Rows.Count; i++) { string data = ""; for (int j = 0; j < dt.Columns.Count; j++) { string str = dt.Rows[i][j].ToString(); Console.Write(str); str = str.Replace("\"", "\"\"");//替換英文冒號 英文冒號需要換成兩個冒號 if (str.Contains(',') || str.Contains('"') || str.Contains('\r') || str.Contains('\n')) //含逗號 冒號 換行符的需要放到引號中 { str = string.Format("\"{0}\"", str); } data += str; if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } sw.Close(); fs.Close(); }
3.實現通過對話方塊儲存
通過Dialog實現儲存對話方塊,並返回檔案的全路徑,傳給SaveCSV方法和CreateCSV_Head方法,實現儲存
private void button8_Click_1(object sender, EventArgs e) { if (dt.Columns.Count != 6) { MessageBox.Show("請完成計算後再進行儲存"); } else { //開啟儲存檔案的對話方塊 SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = ""; sfd.InitialDirectory = @"C:\"; sfd.Filter = "逗號分隔符| *.csv"; sfd.ShowDialog(); //返回檔案全路徑 string path = sfd.FileName; if (path == "") { return; } string CSV_Head = "欄位1,欄位2,欄位3,欄位4,欄位5,欄位6";//定義表頭欄位 if (!File.Exists(path)) { CreateCSV_Head(CSV_Head, path);//如果不存在,建立csv檔案,並建立表頭 } try {//防止csv檔案被佔用的異常 SaveCSV(dt, path); ;//該演算法所有歷史結果儲存,存在Debug下 } catch (IOException index0) { MessageBox.Show("儲存檔案出錯:" + index0.Message + "請關閉該檔案後再執行儲存!"); } } }
4.總結
此方法可以實現檔案儲存,但是建立表頭和寫入其餘內容分開寫不太合理,待有空改進