前言

公司最近开发需要将数据保存到.csv文件(逗号分隔值 文件)中然后上传到ftp服务器上,供我们系统还有客户系统调用,之前完全没有接触过这个,所以先来看看百度的解释:逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。

CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。

简单的说就是逗号隔开 双引号 内即为吗需要的值 数据格式并没有非常统一的标准 但是为了避免出错 我们在开发的时候统一格式是这样的

"name","pwd","date"

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

接下来代码处理中默认格式都是这样的 其实就是纯文本的形式

为什么要用csv文件

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

而在项目开发中 有需要做的处理也不是很简单的

比如有csv文件的读取 数据的转换(如转成datatable),csv文件的重命名 ,csv文件的写入,文件上传到ftp服务器上等等

这里将开发的方法进行了简单的整理,以备不时之需,时间仓促,有不足之处大家多多指点。

注意的点

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

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

③文件末尾不能出现空的行,不然会出现datatable溢出情况,这种情况可以代码处理 但是开发中最好约束好方便数据处理

一、将CSV文件的数据读取到DataTable中

首先,我们为了方便管理,在web网站中常常需要读取csv文件中的数据并且显示在网站上方便查询。所以比较方便的办法是见csv文件中的数据转换成datatable形式,代码如下。

/// <summary>
/// 将CSV文件的数据读取到DataTable中
/// </summary>
/// <param name="fileName">CSV文件路径</param>
/// <returns>返回读取了CSV数据的DataTable</returns>
public static DataTable OpenCSV(string filePath)
{DataTable dt = new DataTable();FileStream fs = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);StreamReader sr = new StreamReader(fs, Encoding.UTF8);//StreamReader sr = new StreamReader(fs, encoding);//string fileContent = sr.ReadToEnd();//记录每次读取的一行记录string strLine = "";//记录每行记录中的各字段内容string[] aryLine = null;string[] tableHead = null;//标示列数int columnCount = 0;//标示是否是读取的第一行bool IsFirst = true;//逐行读取CSV中的数据while ((strLine = sr.ReadLine()) != null){if (IsFirst == true){tableHead = strLine.Split(',');IsFirst = false;columnCount = tableHead.Length;//创建列for (int i = 0; i < columnCount; i++){tableHead[i] = tableHead[i].Replace("\"", "");DataColumn dc = new DataColumn(tableHead[i]);dt.Columns.Add(dc);}}else{aryLine = strLine.Split(',');DataRow dr = dt.NewRow();for (int j = 0; j < columnCount; j++){dr[j] = aryLine[j].Replace("\"","");}dt.Rows.Add(dr);}}if (aryLine != null && aryLine.Length > 0){dt.DefaultView.Sort = tableHead[2] + " " + "DESC";}sr.Close();fs.Close();return dt;
}

二、将DataTable中数据写入到CSV文件中

当然我们一个文件中的数据迁移到另一个文件中或者 直接从数据库中查询的数据 插入到csv文件中 ,有一种方法是通过datatable的形式中转,所以 需要把datatable 转成 csv 代码如下:

/// <summary>
/// 将DataTable中数据写入到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataTable</param>
/// <param name="fileName">CSV的文件路径</param>
public static bool SaveCSV(DataTable dt, string fullPath)
{try{FileInfo fi = new FileInfo(fullPath);if (!fi.Directory.Exists){fi.Directory.Create();}FileStream fs = new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);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++){string str = dt.Rows[i][j].ToString();str = string.Format("\"{0}\"", str);data += str;if (j < dt.Columns.Count - 1){data += ",";}}sw.WriteLine(data);}sw.Close();fs.Close();return true;}catch {return false;}
}

三、修改文件名称

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

/// <summary>
/// 修改文件名称
/// </summary>
/// <param name="OldPath">旧的路径 完整的物理路径</param>
/// <param name="NewPath">新的路径</param>
/// <returns></returns>
public static bool ChangeFileName(string OldPath, string NewPath) {bool re = false;//OldPath = HttpContext.Current.Server.MapPath(OldPath);虚拟的//NewPath = HttpContext.Current.Server.MapPath(NewPath);try {if (File.Exists(OldPath)) {File.Move(OldPath, NewPath);re = true;}}catch {re = false;}return re;
}

四、scv文件的数据写入

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

 1 /// <summary>2 /// 写入文件3 /// </summary>4 /// <param name="fullPath"></param>5 /// <param name="Data"></param>6 /// <returns></returns>7 public static bool SaveCSV(string fullPath,string Data)8 {9     bool re = true;
10     try
11     {
12         FileStream FileStream = new FileStream(fullPath, FileMode.Append);
13         StreamWriter sw = new StreamWriter(FileStream, System.Text.Encoding.UTF8);
14         sw.WriteLine(Data);
15         //清空缓冲区
16         sw.Flush();
17         //关闭流
18         sw.Close();
19         FileStream.Close();
20     }
21     catch {
22         re = false;
23     }
24     return re;
25 }

五、上传到ftp服务器

把处理好的数据文件上传到ftp服务器供系统调用

/// <summary>
/// 上传文件
/// </summary>
/// <param name="fileinfo">需要上传的文件</param>
/// <param name="targetDir">目标路径</param>
/// <param name="hostname">ftp地址(不带ftp;//)</param>
/// <param name="username">ftp用户名</param>
/// <param name="password">ftp密码</param>
public static bool UploadFtpFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password)
{bool re = true;//1. check targetstring target;if (targetDir.Trim() == ""){return false;}target = fileinfo.Name;  //使用临时文件名string URI = "FTP://" + hostname + "/" + targetDir + "/" + target;///WebClient webcl = new WebClient();System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);//设置FTP命令 设置所要执行的FTP命令,//ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;//指定文件传输的数据类型ftp.UseBinary = true;ftp.UsePassive = true;//告诉ftp文件大小ftp.ContentLength = fileinfo.Length;//缓冲大小设置为2KBconst int BufferSize = 2048;byte[] content = new byte[BufferSize - 1 + 1];int dataRead;//打开一个文件流 (System.IO.FileStream) 去读上传的文件using (FileStream fs = fileinfo.OpenRead()){try{//把上传的文件写入流using (Stream rs = ftp.GetRequestStream()){do{//每次读文件流的2KBdataRead = fs.Read(content, 0, BufferSize);rs.Write(content, 0, dataRead);} while (!(dataRead < BufferSize));rs.Close();}}catch (Exception ex) {re = false;}finally{fs.Close();}}return re;
}

C#对.CSV格式的文件--逗号分隔值文件 的读写操作及上传ftp服务器操作方法总结(转)相关推荐

  1. 自动备份网站和数据库打包并上传FTP服务器并删除前30天文件

    自动备份网站和数据库打包并上传FTP服务器并删除前30天文件 @echo off<nul 3>nul Set nowdate=%date:~0,10% set nowdate=%nowda ...

  2. 文件压缩及上传FTP服务器简单应用(实践篇)

    前言 时隔这么久我又回来了,最近忙里偷闲写了一个FTP上传文件的demo,用于上传公司发布的USDK服务的log文件,之前发布的USDK在客户那儿出现了不少bug,而解决这些bug需要我们的辛勤测试人 ...

  3. Chrome扩展:本地应用上传本地文件到谷歌插件,再由插件上传到服务器

    须知 谷歌扩展只能传输和JSON兼容的数据,可通过JSON.parse(JSON.stringify(form_data))判断兼容与否. 解决方案 FormData和JSON不兼容.要上传文件,可通 ...

  4. mac 上传ftp服务器文件夹权限,mac 访问 ftp服务器文件夹权限

    mac 访问 ftp服务器文件夹权限 内容精选 换一换 在"云服务器列表"页,单击下拉按钮展开会话列表,查看会话连接状态,出现"关闭应用失败"的异常.将鼠标移动 ...

  5. mac 上传ftp服务器文件大小,mac与windows通过ftp传输文件

    1.两个系统相互传文件,比较通用的方式是用QQ,两台电脑一台各登陆一个qq,发文件就行了,在同一个网段时,qq会自动转换为按局域网的方式传输. 2.本人不愿安装qq,以ftp方式进行传输,先在wndo ...

  6. 怎么上传ftp服务器文件,ftp服务器如何上传本地文件

    ftp服务器如何上传本地文件 内容精选 换一换 在本地主机和Windows弹性云服务器上分别安装QQ.exe等工具进行数据传输.使用远程桌面连接mstsc方式进行数据传输.该方式不支持断点续传,可能存 ...

  7. FTP命令:下载,上传FTP服务器中的文件

    步骤 1: 建立 FTP 连接 想要连接 FTP 服务器,在命令上中先输入ftp然后空格跟上 FTP 服务器的域名 'domain.com' 或者 IP 地址例如:1.ftp domain.com2. ...

  8. ftp 服务器 单文件上传,ftp 服务器 单文件上传

    ftp 服务器 单文件上传 内容精选 换一换 本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务,将文件从本地上传到云服务器中.已在待上传文件的云服务器中搭建 FTP 服务.如果您的云服务 ...

  9. asp.net fileupload 文件上传后服务器上找不到文件,Asp.net中FileUpload控件上传文件例子...

    FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器.用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles ...

最新文章

  1. UCL葡萄酒(red white wine quality)数据集字段解释、数据导入实战
  2. CSS画基本图形——圆
  3. 神策数据全面支持出海客户合规 GDPR!
  4. Android开发之API29以上Environment.getExternalStoragePublicDirectory废弃的问题
  5. web前端 到底怎么学?掌握什么可以拿到高薪?
  6. openssl 1.1.1编译语句
  7. 微信小程序-自定义底部导航
  8. “打工皇帝”唐骏的成功4+1理论
  9. 使用switchhost进行host文件管理
  10. Windows系统如何合并两个txt文本
  11. photoshop cs4 注册
  12. C++实现跑酷小游戏(转载)
  13. C# 实现实时网速
  14. python 基础代谢率计算_基于python实现计算且附带进度条代码实例
  15. 使用远程工具远程连接linux(xshell,xftp,xmanager,xrdp)
  16. 长得类似铁甲小宝的机器人_这部特摄剧除了大神以外,女配角也非常养眼,童年只看机器人系列...
  17. 损失函数-MSE-CEE
  18. CCE to REG bundle
  19. web自动化学习之selenium安装喝浏览器驱动和元素定位
  20. 『每周译Go』手把手教你用 Go 实现一个 mTLS

热门文章

  1. 移动端项目中vConsole插件的安装和使用
  2. 学Python,站在这棵树上就对了 | Python技能树测评
  3. html实现滑动解锁_js实现滑动解锁功能(PC+Moblie)
  4. 同一个编译脚本下 arm 交叉编译 生成文件大小不一致的问题分析
  5. 中小企业如何持续成长——融资篇
  6. 盘点微软 .NET 技术八年发展历程转
  7. mvc基于ASP NET大学生校园招聘网站的C#设计与开发
  8. sendmail 命令
  9. oracle flashback与归档关系,Oracle闪回归档(下) —— Oracle Flashback Archive
  10. 全世界的大脑联合起来!全球网脑论坛BBS介绍,欢迎加入