c#ftp操作全解:创建删除目录,上传下载文件,删除移动文件,文件改名,文件目录查询
全栈工程师开发手册 (作者:栾鹏)
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操作全解:创建删除目录,上传下载文件,删除移动文件,文件改名,文件目录查询相关推荐
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
转自:http://blog.csdn.net/soarheaven/archive/2008/12/08/3474152.aspx 最近项目需要对FTP服务器进行操作,现把实现总结如下: 打算分2篇 ...
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1...
相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...
- 创建文件、文件上传下载、发送邮件附件以及文件点击预览功能(超详细注解)
根据模板生成文件 @Overridepublic File exportStuFileExcelNew(Studengt student, Page<StuFile> page)throw ...
- minio实现文件上传下载和删除功能
前言 之前用到文件上传功能,在这里做个学习记录.使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费).minio的中文文档:https:// ...
- maven 文件上传下载_使用Maven将文件上传和下载到S3
maven 文件上传下载 多年来,我已经看到许多团队以许多不同的方式使用Maven. Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境. 通常 ...
- 文件上传下载(2)_文件写入硬盘
本系列博客汇总在这里:文件上传下载汇总汇总 目录 文件上传至服务器 文件上传至服务器 1.编写 jsp 页面 upload.jsp. 2.编写 servlet(FileUploadServlet),以 ...
- python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改
全栈工程师开发手册 (作者:栾鹏) python教程全解 python中ftp操作: ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp ...
- python采集修改原创_python应用系列教程——python中ftp操作:连接、登录、获取目录,重定向、上传下载,删除更改...
python中ftp操作: ftp=FTP() #设置变量 ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.connect("IP"," ...
- 阿里云OSS文件上传存储和删除,获取文件外网访问路径
因为项目中需要存储的数据主要是图片数据,所以使用阿里云提供的OSS存储,性价比高,也很简便.(本文一步一步操作指导最后成功都有截图) 前提工作: 已经在oss创建了bucket,就是一个项目的意思.并 ...
最新文章
- subShell与代码块
- 报错“Error running ‘Tomcat 9.0.17‘: Address localhost:1099 is already in use
- SpringBoot整合HBase将数据写入Docker中的HBase
- 使用FTP获取RFC文档
- 事务隔离级别神话与误解
- 关于SSH的分工(网友讨论集合贴)
- Asp.Net将Excel数据导入Sql Server数据库的的例子
- 操作系统概念 第九版 Operating System Concepts, 9th Edition 中文译稿(不定时更新)
- 西门子 SinuTrain 840Dsl OPC UA 模拟
- 高通9008端口刷linux,高通黑砖强制9008_高通救砖9008刷底层
- 如何破解HIT的孤岛效应,一起关于患者主索引的案例分享
- 下载Youtube单个视频和播放列表的方法详细教程
- 阄阄乐-IOS抓阄抽签工具
- 台式机 装 服务器系统,台式机和笔记本电脑应该安装什么系统比较好?
- RegistryKey类的学习(转载)
- 袋鼠云研发手记 | 开源·数栈-扩展FlinkSQL实现流与维表的join
- iPhone通讯录导入及备份方法
- 【云原生之Docker实战】使用Docker部署MrDoc个人在线文档系统
- 7年老Android一次操蛋的面试经历,灵魂拷问
- 程序员应了解的那些事(4)求递归算法的时间复杂度
热门文章
- 多x多y的origin图_孖记士多 X 阿婆牛杂!广州的两大本土老字号,搞在一起了!...
- Vue3学习之第二节:ref函数、reactive函数
- 【java笔记】File类(3):FileFilter文件过滤器原理和使用
- 【二分法】计蒜客:气球消消乐
- jQuery 表格排序插件 Tablesorter 使用
- ffdshow 源代码分析1 : 整体结构
- jmx.JmxAdminException
- java图形界面 关闭_用 java编写的图形用户界面运行后怎么关不掉
- 单片机单口不可用或被占用_新唐单片机代码评审总结
- oracle的.aud文件,Oracle 11g 在audit_file_dest目录下产生大量的aud文件