2
///
将DataTable中数据写入到CSV文件中
3
///
</summary>
4
///
<param name="dt">
提供保存数据的DataTable
</param>
5
///
<param name="fileName">
CSV的文件路径
</param>
6
public
static
void
SaveCSV(DataTable dt)
8
SaveFileDialog objSFD =
new
SaveFileDialog() { DefaultExt =
"
csv
"
, Filter =
"
CSV Files (*.csv)|*.csv|Excel XML (*.xml)|*.xml|All files (*.*)|*.*
"
, FilterIndex =
1
};
9
if
(objSFD.ShowDialog() ==
true
)
10
{
11
string
strFormat =
objSFD.FileName;
12
FileInfo fi =
new
FileInfo(strFormat);
13
if
(!
fi.Directory.Exists)
14
{
15
fi.Directory.Create();
16
}
17
FileStream fs =
new
FileStream(strFormat, System.IO.FileMode.Create, System.IO.FileAccess.Write);
18
//
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
19
StreamWriter sw =
new
StreamWriter(fs, System.Text.Encoding.UTF8);
20
string
data =
""
;
21
//
写出列名称
22
for
(
int
i =
0
; i < dt.Columns.Count; i++
)
23
{
24
data +=
dt.Columns[i].ColumnName.ToString();
25
if
(i < dt.Columns.Count -
1
)
26
{
27
data +=
"
,
"
;
28
}
29
}
30
sw.WriteLine(data);
31
//
写出各行数据
32
for
(
int
i =
0
; i < dt.Rows.Count; i++
)
33
{
34
data =
""
;
35
for
(
int
j =
0
; j < dt.Columns.Count; j++
)
36
{
37
string
str =
dt.Rows[i][j].ToString();
38
str = str.Replace(
"
\"
"
,
"
\"\"
"
);
//
替换英文冒号 英文冒号需要换成两个冒号
39
if
(str.Contains(
'
,
'
) || str.Contains(
'
"
'
)
40
|| str.Contains(
'
\r
'
) || str.Contains(
'
\n
'
))
//
含逗号 冒号 换行符的需要放到引号中
41
{
42
str =
string
.Format(
"
\"{0}\"
"
, str);
43
}
45
data +=
str;
46
if
(j < dt.Columns.Count -
1
)
47
{
48
data +=
"
,
"
;
49
}
50
}
51
sw.WriteLine(data);
52
}
53
sw.Close();
54
fs.Close();
55
56
}
1 /// <summary>
2 /// 将CSV文件的数据读取到DataTable中
3 /// </summary>
4 /// <param name="fileName">CSV文件路径</param>
5 /// <returns>返回读取了CSV数据的DataTable</returns>
6 public static DataTable OpenCSV(string filePath)
8 Encoding encoding = Common.GetType(filePath); //Encoding.ASCII;//
9 DataTable dt = new DataTable();
10 FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
12 //StreamReader sr = new StreamReader(fs, Encoding.UTF8);
13 StreamReader sr = new StreamReader(fs, encoding);
14 //string fileContent = sr.ReadToEnd();
15 //encoding = sr.CurrentEncoding;
16 //记录每次读取的一行记录
17 string strLine = "";
18 //记录每行记录中的各字段内容
19 string[] aryLine = null;
20 string[] tableHead = null;
21 //标示列数
22 int columnCount = 0;
23 //标示是否是读取的第一行
24 bool IsFirst = true;
25 //逐行读取CSV中的数据
26 while ((strLine = sr.ReadLine()) != null)
27 {
28 //strLine = Common.ConvertStringUTF8(strLine, encoding);
29 //strLine = Common.ConvertStringUTF8(strLine);
31 if (IsFirst == true)
32 {
33 tableHead = strLine.Split(',');
34 IsFirst = false;
35 columnCount = tableHead.Length;
36 //创建列
37 for (int i = 0; i < columnCount; i++)
38 {
39 DataColumn dc = new DataColumn(tableHead[i]);
40 dt.Columns.Add(dc);
41 }
42 }
43 else
44 {
45 aryLine = strLine.Split(',');
46 DataRow dr = dt.NewRow();
47 for (int j = 0; j < columnCount; j++)
48 {
49 dr[j] = aryLine[j];
50 }
51 dt.Rows.Add(dr);
52 }
53 }
54 if (aryLine != null && aryLine.Length > 0)
55 {
56 dt.DefaultView.Sort = tableHead[0] + " " + "asc";
57 }
59 sr.Close();
60 fs.Close();
61 return dt;
62 }
找了好多只有这个好用 ================================================================
================================================================================================================================转自https://www.cnblogs.com/Clin/archive/2013/03/14/2959022.html===================
========================================================================================================================