全栈工程师开发手册 (作者:栾鹏)
c#教程全解

c#实现ftp的操作。包括创建删除目录,上传下载文件,删除移动文件,文件改名,文件目录查询。

在调试ftp前,需要在目标主机上开启ftp功能。这里在本机上调试,目标主机也是本机。ftp信息如下表

主机地址192.168.8.101,端口号使用默认21端口,开启了匿名登录。所以在代码中登陆ftp账号密码为空。

测试代码

static void Main()
{FtpWeb ftp=new FtpWeb("192.168.8.101","","","");  //匿名登陆ftpif (!ftp.DirectoryExist("", "lp"))   //判断指定目录下是否存在指定的子目录{System.Console.WriteLine("ftp上lp文件夹内存在lp1文件夹");ftp.MakeDir("lp");  //创建一个lp的文件夹ftp.MakeDir("lp/lp1");  //创建一个lp1的子文件夹}if (!ftp.DirectoryExist("lp", "lp2")) //判断指定目录是否存在一个子文件夹{ftp.MakeDir("lp/lp2");  //创建一个lp2的子文件夹}if (!ftp.FileExist("lp", "test.txt"))   //判断指定目录下是否存在指定的文件{System.Console.WriteLine("ftp上lp文件夹内存在test.txt文件");ftp.Upload("J:\\test.txt", "lp/test.txt");   //将本地J:\\test.txt文件上传到ftp目录下lp/test.txt}ftp.Download("lp/test.txt", "J:\\test1.txt");   //将ftp目录下stk/test.txt下载到本地J:\\test.txt文件string[] allfile = ftp.GetFilesDetailList("lp");  //获取ftp根目录下lp文件夹内的明细(包含文件和文件夹)foreach (string str in allfile){System.Console.WriteLine(str);}allfile = ftp.GetDirectoryList("lp");   //获取指定目录下的文件夹列表foreach (string str in allfile){System.Console.WriteLine(str);}long filesize = ftp.GetFileSize("lp/test.txt");  //查询指定文件的大小ftp.ReName("lp/test.txt", "test1.txt");  //将指定文件改名,只能相同目录ftp.MovieFile("lp/test1.txt", "test2.txt");  //将指定文件移动,只能相同目录ftp.Delete("lp/test2.txt");   //删除ftp上的文件ftp.RemoveDirectory("lp/lp2");   //删除ftp上的lp2文件夹(ftp要求只能删除空的目录,除非先删除里面的文件)
}}
}

ftp工具类的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Net;
using System.IO;
using System.Windows.Forms;namespace util
{public class FtpWeb{string ftpServerIP;string ftpRemotePath;string ftpUserID;string ftpPassword;string ftpURI;// 连接FTP//FtpRemotePath指定FTP连接成功后的当前目录, 如果不指定即默认为根目录public FtpWeb(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword){ftpServerIP = FtpServerIP;ftpRemotePath = FtpRemotePath;ftpUserID = FtpUserID;ftpPassword = FtpPassword;ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}// 上传public void Upload(string localpath,string urlpath){FileInfo fileInf = new FileInfo(localpath);string uri = ftpURI + urlpath;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.UploadFile;reqFTP.UseBinary = true;reqFTP.ContentLength = fileInf.Length;int buffLength = 2048;byte[] buff = new byte[buffLength];int contentLen;FileStream fs = fileInf.OpenRead();try{Stream strm = reqFTP.GetRequestStream();contentLen = fs.Read(buff, 0, buffLength);while (contentLen != 0){strm.Write(buff, 0, contentLen);contentLen = fs.Read(buff, 0, buffLength);}strm.Close();fs.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}// 下载public void Download(string urlpath,string localpath){FtpWebRequest reqFTP;try{FileStream outputStream = new FileStream(localpath, FileMode.Create);reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + urlpath));reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();long cl = response.ContentLength;int bufferSize = 2048;int readCount;byte[] buffer = new byte[bufferSize];readCount = ftpStream.Read(buffer, 0, bufferSize);while (readCount > 0){outputStream.Write(buffer, 0, readCount);readCount = ftpStream.Read(buffer, 0, bufferSize);}ftpStream.Close();outputStream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}// 删除文件public void Delete(string urlpath){try{string uri = ftpURI + urlpath;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}// 删除文件夹public void RemoveDirectory(string urlpath){try{string uri = ftpURI + urlpath;FtpWebRequest reqFTP;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.KeepAlive = false;reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;string result = String.Empty;FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();long size = response.ContentLength;Stream datastream = response.GetResponseStream();StreamReader sr = new StreamReader(datastream);result = sr.ReadToEnd();sr.Close();datastream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}//获取指定目录下明细(包含文件和文件夹)public string[] GetFilesDetailList(string urlpath){string[] downloadFiles;try{bool getin=false;string uri = ftpURI + urlpath;StringBuilder result = new StringBuilder();FtpWebRequest ftp;ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;WebResponse response = ftp.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string line = reader.ReadLine();while (line != null){getin = true;result.Append(line);result.Append("\n");line = reader.ReadLine();}if(getin)result.Remove(result.ToString().LastIndexOf("\n"), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){downloadFiles = null;MessageBox.Show(ex.ToString());return downloadFiles;}}// 获取指定目录下文件列表(仅文件)public string[] GetFileList(string urlpath,string mask){string[] downloadFiles;StringBuilder result = new StringBuilder();FtpWebRequest reqFTP;try{string uri = ftpURI + urlpath;reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;WebResponse response = reqFTP.GetResponse();StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);string line = reader.ReadLine();while (line != null){if (mask.Trim() != string.Empty && mask.Trim() != "*.*"){string mask_ = mask.Substring(0, mask.IndexOf("*"));if (line.Substring(0, mask_.Length) == mask_){result.Append(line);result.Append("\n");}}else{result.Append(line);result.Append("\n");}line = reader.ReadLine();}result.Remove(result.ToString().LastIndexOf('\n'), 1);reader.Close();response.Close();return result.ToString().Split('\n');}catch (Exception ex){downloadFiles = null;if (ex.Message.Trim() != "远程服务器返回错误: (550) 文件不可用(例如,未找到文件,无法访问文件)。"){MessageBox.Show(ex.ToString());}return downloadFiles;}}// 获取指定目录下所有的文件夹列表(仅文件夹)public string[] GetDirectoryList(string urlpath){string[] drectory = GetFilesDetailList(urlpath);string m = string.Empty;foreach (string str in drectory){if (str == "")continue;int dirPos = str.IndexOf("<DIR>");if (dirPos > 0){/*判断 Windows 风格*/m += str.Substring(dirPos + 5).Trim() + "\n";}else if (str.Trim().Substring(0, 1).ToUpper() == "D"){/*判断 Unix 风格*/string dir = str.Substring(54).Trim();if (dir != "." && dir != ".."){m += dir + "\n";}}}if (m[m.Length - 1] == '\n')m.Remove(m.Length - 1);char[] n = new char[] { '\n' };return m.Split(n);   //这样最后一个始终是空格了}/// 判断指定目录下是否存在指定的子目录// RemoteDirectoryName指定的目录名public bool DirectoryExist(string urlpath,string RemoteDirectoryName){string[] dirList = GetDirectoryList(urlpath);foreach (string str in dirList){if (str.Trim() == RemoteDirectoryName.Trim()){return true;}}return false;}// 判断指定目录下是否存在指定的文件//远程文件名public bool FileExist(string urlpath,string RemoteFileName){string[] fileList = GetFileList(urlpath,"*.*");foreach (string str in fileList){if (str.Trim() == RemoteFileName.Trim()){return true;}}return false;}// 创建文件夹public void MakeDir(string urlpath){FtpWebRequest reqFTP;try{// dirName = name of the directory to create.reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI +urlpath));reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}// 获取指定文件大小public long GetFileSize(string urlpath){FtpWebRequest reqFTP;long fileSize = 0;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + urlpath));reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();fileSize = response.ContentLength;ftpStream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}return fileSize;}// 改名public void ReName(string urlpath, string newname){FtpWebRequest reqFTP;try{reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + urlpath));  //源路径reqFTP.Method = WebRequestMethods.Ftp.Rename;reqFTP.RenameTo = newname; //新名称reqFTP.UseBinary = true;reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();Stream ftpStream = response.GetResponseStream();ftpStream.Close();response.Close();}catch (Exception ex){MessageBox.Show(ex.ToString());}}// 移动文件public void MovieFile(string urlpath, string newname){ReName(urlpath, newname);}// 切换当前目录/// <param name="IsRoot">true 绝对路径   false 相对路径</param>public void GotoDirectory(string DirectoryName, bool IsRoot){if (IsRoot){ftpRemotePath = DirectoryName;}else{ftpRemotePath += DirectoryName + "/";}ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";}}}

c#ftp操作全解:创建删除目录,上传下载文件,删除移动文件,文件改名,文件目录查询相关推荐

  1. [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1

    转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...

  2. Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

  3. 创建文件、文件上传下载、发送邮件附件以及文件点击预览功能(超详细注解)

    根据模板生成文件 @Overridepublic File exportStuFileExcelNew(Studengt student, Page<StuFile> page)throw ...

  4. minio实现文件上传下载和删除功能

    前言 之前用到文件上传功能,在这里做个学习记录.使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费).minio的中文文档:https:// ...

  5. maven 文件上传下载_使用Maven将文件上传和下载到S3

    maven 文件上传下载 多年来,我已经看到许多团队以许多不同的方式使用Maven. Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境. 通常 ...

  6. 文件上传下载(2)_文件写入硬盘

    本系列博客汇总在这里:文件上传下载汇总汇总 目录 文件上传至服务器 文件上传至服务器 1.编写 jsp 页面 upload.jsp. 2.编写 servlet(FileUploadServlet),以 ...

  7. python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python中ftp操作: ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp ...

  8. python采集修改原创_python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改...

    python中ftp操作: ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.connect("IP"," ...

  9. 阿里云OSS文件上传存储和删除,获取文件外网访问路径

    因为项目中需要存储的数据主要是图片数据,所以使用阿里云提供的OSS存储,性价比高,也很简便.(本文一步一步操作指导最后成功都有截图) 前提工作: 已经在oss创建了bucket,就是一个项目的意思.并 ...

最新文章

  1. subShell与代码块
  2. 报错“Error running ‘Tomcat 9.0.17‘: Address localhost:1099 is already in use
  3. SpringBoot整合HBase将数据写入Docker中的HBase
  4. 使用FTP获取RFC文档
  5. 事务隔离级别神话与误解
  6. 关于SSH的分工(网友讨论集合贴)
  7. Asp.Net将Excel数据导入Sql Server数据库的的例子
  8. 操作系统概念 第九版 Operating System Concepts, 9th Edition 中文译稿(不定时更新)
  9. 西门子 SinuTrain 840Dsl OPC UA 模拟
  10. 高通9008端口刷linux,高通黑砖强制9008_高通救砖9008刷底层
  11. 如何破解HIT的孤岛效应,一起关于患者主索引的案例分享
  12. 下载Youtube单个视频和播放列表的方法详细教程
  13. 阄阄乐-IOS抓阄抽签工具
  14. 台式机 装 服务器系统,台式机和笔记本电脑应该安装什么系统比较好?
  15. RegistryKey类的学习(转载)
  16. 袋鼠云研发手记 | 开源·数栈-扩展FlinkSQL实现流与维表的join
  17. iPhone通讯录导入及备份方法
  18. 【云原生之Docker实战】使用Docker部署MrDoc个人在线文档系统
  19. 7年老Android一次操蛋的面试经历,灵魂拷问
  20. 程序员应了解的那些事(4)求递归算法的时间复杂度

热门文章

  1. 多x多y的origin图_孖记士多 X 阿婆牛杂!广州的两大本土老字号,搞在一起了!...
  2. Vue3学习之第二节:ref函数、reactive函数
  3. 【java笔记】File类(3):FileFilter文件过滤器原理和使用
  4. 【二分法】计蒜客:气球消消乐
  5. jQuery 表格排序插件 Tablesorter 使用
  6. ffdshow 源代码分析1 : 整体结构
  7. jmx.JmxAdminException
  8. java图形界面 关闭_用 java编写的图形用户界面运行后怎么关不掉
  9. 单片机单口不可用或被占用_新唐单片机代码评审总结
  10. oracle的.aud文件,Oracle 11g 在audit_file_dest目录下产生大量的aud文件