原文地址 http://blog.chinaunix.net/uid-7374279-id-2057615.html
一、將DataTable內容寫入到CSV文件
///
/// 將DataTable中的數據保存成CSV文件
///
private void btnSaveCSV_Click(object sender, EventArgs e)
{
saveFileDialog1.Filter = "CSV文件|*.CSV";
saveFileDialog1.InitialDirectory = "C:\\";
if (saveFileDialog1.ShowDialog() == DialogResult.Cancel)
{
return;
}
else
{
string fileName = saveFileDialog1.FileName;
SaveCSV(ds.Tables[0], fileName);
}
}
///
/// 將DataTable中數據寫入到CSV文件中
///
/// 提供保存數據的DataTable
/// CSV的文件路徑
public void SaveCSV(DataTable dt, string fileName)
{
FileStream fs = new FileStream(fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
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++)
{
data += dt.Rows[i][j].ToString();
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
sw.Close();
fs.Close();
MessageBox.Show("CSV文件保存成功!");
}
二、將CSV文件內容讀取到DataTable中
///
/// 打開CSV並顯示其數據
///
private void btnOpenCSV_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "CSV文件|*.CSV";
if (openFileDialog1.ShowDialog() == DialogResult.Cancel)
{
return;
}
else
{
this.dgvShow.DataSource = null;
string fileName = openFileDialog1.FileName;
this.dgvShow.DataSource = OpenCSV(fileName);
MessageBox.Show("成功顯示CSV數據!");
}
}
///
/// 將CSV文件的數據讀取到DataTable中
///
/// CSV文件路徑
/// 返回讀取了CSV數據的DataTable
public DataTable OpenCSV(string fileName)
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
//記錄每次讀取的一行記錄
string strLine = "";
//記錄每行記錄中的各字段內容
string[] aryLine;
//標示列數
int columnCount = 0;
//標示是否是讀取的第一行
bool IsFirst = true;
//逐行讀取CSV中的數據
while ((strLine = sr.ReadLine()) != null)
{
aryLine=strLine.Split(',');
if (IsFirst == true)
{
IsFirst = false;
columnCount = aryLine.Length;
//創建列
for (int i = 0; i < columnCount; i++)
{
DataColumn dc = new DataColumn(aryLine[i]);
dt.Columns.Add(dc);
}
}
else
{
DataRow dr = dt.NewRow();
for (int j = 0; j < columnCount; j++)
{
dr[j] = aryLine[j];
}
dt.Rows.Add(dr);
}
}
sr.Close();
fs.Close();
return dt;
}