CSV文件是 逗号分隔值文件
内容基本是这么存的...
姓名,年龄,性别/r/n王有才,19,男/r/n王二妞,18,女
一行值内用逗号 , 分开 行与行之间用 /r/n 分隔
说白了,他其实是一个字符串..按照一定的格式存储进文件..可以直接用文本文件打开..
邮箱,昵称,手机 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000 "3595768@qq.com",test1,13803852000
所以我们可以直接用IO操作..把内容读取出来..
使用文件流的方式读取CSV文件
FileInfo file = new FileInfo(Server.MapPath(filePath)); StreamReader reader = new StreamReader(Server.MapPath(filePath)); string fileContent = reader.ReadToEnd(); reader.Close(); reader.Dispose();
fileContent就是对应的CSV文件的内容..可以使用固定的处理方式截取..断开每一行的数据然后分别处理..
使用表格的形式读取CSV文件
但是如果想要更好的处理的话..可以引用 lumenworks.framework.io.dll
下载地址: http://download.csdn.net/detail/sunyanjie_china/8297731
添加引用
using LumenWorks.Framework.IO.Csv;
代码
DataTable dt = new DataTable(); //表 using (CsvReader csvReader = new CsvReader(new StreamReader(Server.MapPath(filePath), Encoding.Default, true), true)) { string[] headers = csvReader.GetFieldHeaders();//标题数组 for (int i = 0; i < csvReader.FieldCount; i++) { dt.Columns.Add(new DataColumn(headers[i])); } while (csvReader.ReadNextRecord()) { DataRow row = dt.NewRow(); for (int i = 0; i < csvReader.FieldCount; i++) { row[i] = csvReader[i].Replace(" ", "").Replace(" ", ""); } dt.Rows.Add(row); } }
导出数据成CSV文件
1 SaveFileDialog saveFileDialog = new SaveFileDialog(); 2 saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; 3 saveFileDialog.FilterIndex = 0; 4 saveFileDialog.RestoreDirectory = true; 5 saveFileDialog.CreatePrompt = true; 6 saveFileDialog.Title = "导出Excel文件到"; 7 8 DateTime now = DateTime.Now; 9 saveFileDialog.FileName = now.Year.ToString().PadLeft(2) 10 + now.Month.ToString().PadLeft(2, '0') 11 + now.Day.ToString().PadLeft(2, '0') + "-" 12 + now.Hour.ToString().PadLeft(2, '0') 13 + now.Minute.ToString().PadLeft(2, '0') 14 + now.Second.ToString().PadLeft(2, '0'); 15 16 saveFileDialog.ShowDialog(); 17 18 Stream myStream = saveFileDialog.OpenFile(); 19 StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding("gb2312")); 20 string str = ""; 21 try 22 { 23 //写标题 24 for (int i = 0; i < dt.ColumnCount; i++) 25 { 26 if (i > 0) 27 { 28 str += " "; 29 } 30 str += dt.Columns[i].HeaderText; 31 } 32 33 sw.WriteLine(str); 34 //写内容 35 for (int j = 0; j < dt.Rows.Count; j++) 36 { 37 string tempStr = ""; 38 for (int k = 0; k < dt.Columns.Count; k++) 39 { 40 if (k > 0) 41 { 42 tempStr += " "; 43 } 44 tempStr += dt.Rows[j].Cells[k].Value.ToString(); 45 } 46 sw.WriteLine(tempStr); 47 } 48 sw.Close(); 49 myStream.Close(); 50 } 51 catch (Exception ex) 52 { 53 MessageBox.Show(ex.ToString()); 54 } 55 finally 56 { 57 sw.Close(); 58 myStream.Close(); 59 }
//这个方式用的最多..也是最效率的方式导出成为CSV文件..大概20万条数据只需要十几秒的样子..非常方便
//在这里谢谢那些以前翻资料看到文章的那些大神..时间久了都忘却了是哪位..但是还是谢谢..