public classCSVFileHelper
{///
///将DataTable中数据写入到CSV文件中///
/// 提供保存数据的DataTable
/// CSV的文件路径
public static void SaveCSV(DataTable dt, stringfullPath)
{
FileInfo fi= newFileInfo(fullPath);if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
FileStream fs= newFileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
StreamWriter sw = newStreamWriter(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);
}
}///
///将CSV文件的数据读取到DataTable中///
/// CSV文件路径
/// 返回读取了CSV数据的DataTable
public static DataTable OpenCSV(stringfilePath)
{
Encoding encoding= Common.GetType(filePath); //Encoding.ASCII;// DataTable dt = newDataTable();
FileStream fs= newFileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);//StreamReader sr = new StreamReader(fs, Encoding.UTF8);
StreamReader sr = newStreamReader(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= newDataColumn(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();returndt;
}
}