CSV文件的读取 导出

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万条数据只需要十几秒的样子..非常方便
//在这里谢谢那些以前翻资料看到文章的那些大神..时间久了都忘却了是哪位..但是还是谢谢..
原文地址:https://www.cnblogs.com/iiwen/p/4350116.html