C# CSV文件读写如何实现

免费教程   2024年05月10日 19:27  

这篇文章主要介绍了C#CSV文件读写如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#CSV文件读写如何实现文章都会有所收获,下面我们一起来看看吧。

CSV是一种通用的、相对简单的文件格式,最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的。那么,C#如何读取和写入csv格式文件呢?CSV数据格式并没有非常统一的标准 但是为了避免出错 我们在开发的时候统一格式是这样的:

"name","pwd","date"

"张三","123","2015-09-30"

接下来代码处理中默认格式都是这样的

为什么要用csv文件

这就涉及到数据互通的问题,有些程序支持的表格数据另一些程序并不见得支持,而csv格式的却被大多数的应用程序支持,所以在交换保存数据的时候是个不错的选择。

注意的点:

文件处理完的时候一定记得关闭释放数据流 否则文件会被占用

csv并没有严格的标准,多人开发的时候必须规定好格式,统一开发

一、DataTable数据写入CSV文件publicstaticvoidSaveCSV(DataTabledt,stringfullPath)//table数据写入csv{System.IO.FileInfofi=newSystem.IO.FileInfo(fullPath);if(!fi.Directory.Exists){fi.Directory.Create();}System.IO.FileStreamfs=newSystem.IO.FileStream(fullPath,System.IO.FileMode.Create,System.IO.FileAccess.Write);System.IO.StreamWritersw=newSystem.IO.StreamWriter(fs,System.Text.Encoding.UTF8);stringdata="";for(inti=0;i<dt.Columns.Count;i++)//写入列名{data+=dt.Columns[i].ColumnName.ToString();if(i<dt.Columns.Count-1){data+=",";}}sw.WriteLine(data);for(inti=0;i<dt.Rows.Count;i++)//写入各行数据{data="";for(intj=0;j<dt.Columns.Count;j++){stringstr=dt.Rows[i][j].ToString();str=str.Replace("\"","\"\"");//替换英文冒号英文冒号需要换成两个冒号if(str.Contains(',')||str.Contains('"')||str.Contains('\r')||str.Contains('\n'))//含逗号冒号换行符的需要放到引号中{str=string.Format("\"{0}\"",str);}data+=str;if(j<dt.Columns.Count-1){data+=",";}}sw.WriteLine(data);}sw.Close();fs.Close();}二、读取CSV文件到DataTablepublicstaticDataTableOpenCSV(stringfilePath)//从csv读取数据返回table{System.Text.Encodingencoding=GetType(filePath);//Encoding.ASCII;//DataTabledt=newDataTable();System.IO.FileStreamfs=newSystem.IO.FileStream(filePath,System.IO.FileMode.Open,System.IO.FileAccess.Read);System.IO.StreamReadersr=newSystem.IO.StreamReader(fs,encoding);//记录每次读取的一行记录stringstrLine="";//记录每行记录中的各字段内容string[]aryLine=null;string[]tableHead=null;//标示列数intcolumnCount=0;//标示是否是读取的第一行boolIsFirst=true;//逐行读取CSV中的数据while((strLine=sr.ReadLine())!=null){if(IsFirst==true){tableHead=strLine.Split(',');IsFirst=false;columnCount=tableHead.Length;//创建列for(inti=0;i<columnCount;i++){DataColumndc=newDataColumn(tableHead[i]);dt.Columns.Add(dc);}}else{aryLine=strLine.Split(',');DataRowdr=dt.NewRow();for(intj=0;j<columnCount;j++){dr[j]=aryLine[j];}dt.Rows.Add(dr);}}if(aryLine!=null&&aryLine.Length>0){dt.DefaultView.Sort=tableHead[0]+""+"asc";}sr.Close();fs.Close();returndt;}///给定文件的路径,读取文件的二进制数据,判断文件的编码类型///<paramname="FILE_NAME">文件路径</param>///<returns>文件的编码类型</returns>publicstaticSystem.Text.EncodingGetType(stringFILE_NAME){System.IO.FileStreamfs=newSystem.IO.FileStream(FILE_NAME,System.IO.FileMode.Open,System.IO.FileAccess.Read);System.Text.Encodingr=GetType(fs);fs.Close();returnr;}///通过给定的文件流,判断文件的编码类型///<paramname="fs">文件流</param>///<returns>文件的编码类型</returns>publicstaticSystem.Text.EncodingGetType(System.IO.FileStreamfs){byte[]Unicode=newbyte[]{0xFF,0xFE,0x41};byte[]UnicodeBIG=newbyte[]{0xFE,0xFF,0x00};byte[]UTF8=newbyte[]{0xEF,0xBB,0xBF};//带BOMSystem.Text.EncodingreVal=System.Text.Encoding.Default;System.IO.BinaryReaderr=newSystem.IO.BinaryReader(fs,System.Text.Encoding.Default);inti;int.TryParse(fs.Length.ToString(),outi);byte[]ss=r.ReadBytes(i);if(IsUTF8Bytes(ss)||(ss[0]==0xEF&&ss[1]==0xBB&&ss[2]==0xBF)){reVal=System.Text.Encoding.UTF8;}elseif(ss[0]==0xFE&&ss[1]==0xFF&&ss[2]==0x00){reVal=System.Text.Encoding.BigEndianUnicode;}elseif(ss[0]==0xFF&&ss[1]==0xFE&&ss[2]==0x41){reVal=System.Text.Encoding.Unicode;}r.Close();returnreVal;}///判断是否是不带BOM的UTF8格式///<paramname="data"></param>///<returns></returns>privatestaticboolIsUTF8Bytes(byte[]data){intcharByteCounter=1; //计算当前正分析的字符应还有的字节数bytecurByte;//当前分析的字节.for(inti=0;i<data.Length;i++){curByte=data[i];if(charByteCounter==1){if(curByte>=0x80){//判断当前while(((curByte<<=1)&0x80)!=0){charByteCounter++;}//标记位首位若为非0则至少以2个1开始如:110XXXXX...........1111110X if(charByteCounter==1||charByteCounter>6){returnfalse;}}}else{//若是UTF-8此时第一位必须为1if((curByte&0xC0)!=0x80){returnfalse;}charByteCounter--;}}if(charByteCounter>1){thrownewException("非预期的byte格式");}returntrue;}三、修改文件名称

我们需要保存历史数据 或者实时的知道那个文件被修改 可以通过改变文件的名称 如加上当天的日期等等。

publicstaticboolChangeFileName(stringOldPath,stringNewPath){boolre=false;try{if(File.Exists(OldPath)){File.Move(OldPath,NewPath);re=true;}}catch{re=false;}returnre;}四、CSV文件的数据写入

直接在网页表单提交数据保存在csv文件中 直接写入文件

publicstaticboolSaveCSV(stringfullPath,stringData){boolre=true;try{FileStreamFileStream=newFileStream(fullPath,FileMode.Append);StreamWritersw=newStreamWriter(FileStream,System.Text.Encoding.UTF8);sw.WriteLine(Data);//清空缓冲区sw.Flush();//关闭流sw.Close();FileStream.Close();}catch{re=false;}returnre;}

关于“C#CSV文件读写如何实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C#CSV文件读写如何实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部