问题描述
碰到csv文件操作,其实csv文件就是用逗号隔开的文本本件,涉及到一些字符串的处理和解决。
解决
读取文件
读取文件我是将csv中的数据读取到DataTable中,然后再进行数据库操作。具体操作如下
using System.IO;
using System.Data;
public DataTable readFromFile(string fileName)
{
DataTable data = new DataTable();
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs); //流的方式读取
string line = ""; //存储每次读取的行
string[] clo = null; //标题行
string[] row = null; //每行的数据
int cloCount = 0;
bool isFirst = true; //是否是第一行
while ((line = sr.ReadLine()) != null) //循环读入
{
if (isFirst) //如果是第一行
{
clo = line.Split(','); //按照逗号分割成数组
isFirst = false;
cloCount = clo.Length;
for(int i = 1; i < cloCount; i++) //循环存入dataTable标题
{
DataColumn c = new DataColumn(clo[i]);
data.Columns.Add(c);
}
}
else
{
row = line.Split(',');
DataRow r = data.NewRow(); //一个新的行
for(int i = 1; i < cloCount; i++)
{
r[i-1] = row[i];
}
data.Rows.Add(r);
userId = Convert.ToInt32(row[0]);
}
}
sr.Close();
fs.Close();
return data;
}
写入文件
导出到文件的话其实就是吧数据转换成逗号分隔的字符串,一行一行存入csv文件就行,最后导出成功后自动打开文件
using System.IO;
using System.Data;
public void exportData(DataTable data)
{
string filename = "C:\\Users\\admini\\Desktop\\Session1\\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".csv";
//导出到文件的具体位置,文件名我是通过时间字符串来命名的
FileInfo fi = new FileInfo(filename);
if (!fi.Directory.Exists) //如果文件不存在则创建文件
{
fi.Directory.Create();
}
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
string line = "";
for(int i = 0; i < data.Columns.Count; i++) //首先先将标题转成以逗号分隔的字符串
{
line += data.Columns[i].ColumnName.ToString();
if (i < data.Columns.Count - 1)
{
line += ','; //注意最后一个不需要加逗号
}
}
sw.WriteLine(line); //按行写入文件中
for(int i = 0; i < data.Rows.Count; i++) //同上,写入每行的值
{
line = "";
for(int j=0;j< data.Columns.Count; j++)
{
line += data.Rows[i][j].ToString();
if (j < data.Columns.Count - 1)
{
line += ',';
}
}
sw.WriteLine(line);
}
sw.Close();
fs.Close();
DialogResult dr = MessageBox.Show("导出成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //提示信息
if(dr == DialogResult.OK)
{
System.Diagnostics.Process.Start(filename); //点击确定则自动打开文件
}
}
具体就是上面这些,难度不大,有问题指教