Loveboke

人生是一场独自修行的道路!

C# 读取CSV文件

public class CSVHelper
   {
       /// <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();
       }
 
       /// <summary>
       /// 将CSV文件的数据读取到DataTable中
       /// </summary>
       /// <param name="fileName">CSV文件路径</param>
       /// <returns>返回读取了CSV数据的DataTable</returns>
       public static DataTable OpenCSV(string filePath)
       {
           try
           {
               DataTable dt = new DataTable();
               FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
 
               StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
               //记录每次读取的一行记录
               string strLine = "";
               //记录每行记录中的各字段内容
               string[] aryLine = null;
               string[] tableHead = null;
               //标示列数
               int columnCount = 0;
               //标示是否是读取的第一行
               bool IsFirst = true;
               //逐行读取CSV中的数据
               while ((strLine = sr.ReadLine()) != null)
               {
                   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;
           }
           catch (Exception ex)
           {
               throw ex;
           }
       }
 
       public static Encoding GetFileEncoding(string filePath)
       {
           Encoding Result = null;
           FileInfo info = new FileInfo(filePath);
           FileStream fs = default(FileStream);
           try
           {
               fs = info.OpenRead();
               Encoding[] unicodeEncodings =
               {
                   Encoding.BigEndianUnicode,
                   Encoding.Unicode,
                   Encoding.UTF8,
                   Encoding.UTF32,
                   Encoding.UTF7,
                   new UTF32Encoding(true,true)
               };
               for (int i = 0; Result == null && i < unicodeEncodings.Length; i++)
               {
                   fs.Position = 0;
                   byte[] preamble = unicodeEncodings[i].GetPreamble();
                   bool isEqual = true;
                   for (int j = 0; isEqual && j < preamble.Length; j++)
                   {
                       isEqual = preamble[j] == fs.ReadByte();
                   }
                   if (isEqual)
                       Result = unicodeEncodings[i];
 
               }
           }
           catch (IOException ex)
           {
               throw ex;
           }
           finally
           {
               if (fs != null)
               {
                   fs.Close();//包括了Dispose,并通过GC强行释放资源
               }
           }
           if (object.ReferenceEquals(null, Result))
           {
               Result = Encoding.Default;
           }
           return Result;
       }
 
   }

参考地址:https://www.cnblogs.com/DONET-LC/p/7486454.html

L最新评论
    还没有评论!

P发布评论