1. 程式人生 > >C#開發小試手----小功能:csv檔案儲存

C#開發小試手----小功能:csv檔案儲存

需求:將頁面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.總結

此方法可以實現檔案儲存,但是建立表頭和寫入其餘內容分開寫不太合理,待有空改進