C# 读写CSV文件(导入导出)

CSV(逗号分隔值)文件是一种特殊的文件类型,可在Excel 中创建或编辑。 CSV 文件不是采用多列的形式存储信息,而是使用逗号分隔的形式存储信息。 将文本和数字保存在CSV 文件中时,可轻松将它们从一个程序移动至另一个程序。
public class CSVHelper
{
    /// <summary>
    /// 写入CSV
    /// </summary>
    /// <param name="fileName">文件名</param>
    /// <param name="dt">要写入的datatable</param>
    public static void WriteCSV(string fileName, DataTable dt)
    {
        FileStream fs;
        StreamWriter sw;
        string data = null;
 
        //判断文件是否存在,存在就不再次写入列名
        if (!File.Exists(fileName))
        {
            fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            sw = new StreamWriter(fs, Encoding.UTF8);
 
            //写出列名称
            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);
        }
        else
        {
            fs = new FileStream(fileName, FileMode.Append, FileAccess.Write);
            sw = new StreamWriter(fs, Encoding.UTF8);
        }
 
        //写出各行数据
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            data = null;
            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();
    }
 
 
 
    /// <summary>
    /// 读取CSV文件
    /// </summary>
    /// <param name="fileName">文件路径</param>
    public static DataTable ReadCSV(string fileName)
    {
        DataTable dt = new DataTable();
        FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        StreamReader sr = new StreamReader(fs, Encoding.UTF8);
 
        //记录每次读取的一行记录
        string strLine = null;
        //记录每行记录中的各字段内容
        string[] arrayLine = null;
        //判断,若是第一次,建立表头
        bool isFirst = true;
 
        //列的个数
        int dtColumns = 0;
 
        //逐行读取CSV文件
        while ((strLine = sr.ReadLine()) != null)
        {
            strLine = strLine.Trim();//去除头尾空格
            arrayLine = strLine.Split(',');//分隔字符串,返回数组
 
            if (isFirst)  //建立表头
            {
                dtColumns = arrayLine.Length;//列的个数
                for (int i = 0; i < dtColumns; i++)
                {
                    dt.Columns.Add(arrayLine[i]);//每一列名称
                }
                isFirst = false;
            }
            else   //表内容
            {
                DataRow dataRow = dt.NewRow();//新建一行
                for (int j = 0; j < dtColumns; j++)
                {
                    if (arrayLine.Length > j)
                    {
                        dataRow[j] = arrayLine[j];
                    }
                }
                dt.Rows.Add(dataRow);//添加一行
            }
        }
        sr.Close();
        fs.Close();
 
        return dt;
    }
}
posted @   老李的学习之路  阅读(2833)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示