您的位置:首页 > 编程语言 > C#

CSV文件的读写————MES机器文件中比较常用

2015-12-11 16:18 435 查看

public class CSVFileHelper

{

    /// <summary>

    /// 将DataTable中数据写入到CSV文件中

    /// </summary>

    /// <param name="dt">提供保存数据的DataTable</param>

    /// <param name="fileName">CSV的文件路径</param>

    public static void SaveCSV(DataTable dt, string fullPath)

    {

        FileInfo fi = new FileInfo(fullPath);

        if (!fi.Directory.Exists)

        {

            fi.Directory.Create();

        }

        FileStream fs = new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);

        //StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);

        StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);

        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++)

            {

                string str = dt.Rows[i][j].ToString();

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

        DialogResult result = MessageBox.Show("CSV文件保存成功!");

        if (result == DialogResult.OK)

        {

            System.Diagnostics.Process.Start("explorer.exe", Common.PATH_LANG);

        }

    }

    /// <summary>

    /// 将CSV文件的数据读取到DataTable中

    /// </summary>

    /// <param name="fileName">CSV文件路径</param>

    /// <returns>返回读取了CSV数据的DataTable</returns>

    public static DataTable OpenCSV(string filePath)

    {

        Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;//

        DataTable dt = new DataTable();

        FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);

       

        //StreamReader sr = new StreamReader(fs, Encoding.UTF8);

        StreamReader sr = new StreamReader(fs, encoding);

        //string fileContent = sr.ReadToEnd();

        //encoding = sr.CurrentEncoding;

        //记录每次读取的一行记录

        string strLine = "";

        //记录每行记录中的各字段内容

        string[] aryLine = null;

        string[] tableHead = null;

        //标示列数

        int columnCount = 0;

        //标示是否是读取的第一行

        bool IsFirst = true;

        //逐行读取CSV中的数据

        while ((strLine = sr.ReadLine()) != null)

        {

            //strLine = Common.ConvertStringUTF8(strLine, encoding);

            //strLine = Common.ConvertStringUTF8(strLine);

            if (IsFirst == true)

            {

                tableHead = strLine.Split(',');

                IsFirst = false;

                columnCount = tableHead.Length;

                //创建列

                for (int i = 0; i < columnCount; i++)

                {

                    DataColumn dc = new DataColumn(tableHead[i]);

                    dt.Columns.Add(dc);

                }

            }

            else

            {

                aryLine = strLine.Split(',');

                DataRow dr = dt.NewRow();

                for (int j = 0; j < columnCount; j++)

                {

                    dr[j] = aryLine[j];

                }

                dt.Rows.Add(dr);

            }

        }

        if (aryLine != null && aryLine.Length > 0)

        {

            dt.DefaultView.Sort = tableHead[0] + " " + "asc";

        }

       

        sr.Close();

        fs.Close();

        return dt;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#文件与流