c#实现FTP客户端的案例

  

本文是利用c#实现FTP客户端的小例子,主要实现上,传下载,删除等功能,以供学习分享使用。

  

<>强思路:

  

通过读取FTP站点的目录信息,列出对应的文件及文件夹。
  双击目录,则显示子目录,如果是文件,则点击右键,进行下载和删除操作。
  通过读取本地电脑的目录,以树状结构展示,选择本地文件,右键进行上传操作。
  

  

<强>涉及知识点:

  

FtpWebRequest【实现文件传输协议(FTP)客户端】/FtpWebResponse【封装文件传输协议(FTP)服务器对请求的响应】FTP的操作主要集中在两个类中。
  FlowLayoutPanel 【流布局面板】表示一个沿水平或垂直方向动态排放其内容的面板。
  ContextMenuStrip【快捷菜单】主要用于右键菜单。
  资源文件:资源用于存放图片及其他资源。
  

  

<>强效果图强如下

  

左边:双击文件夹进入子目录,点击工具栏按钮”上级目录“返回。文件点击右键进行操作。

  

右边:文件夹则点击前面+号展开。文件则点击右键进行上传。

  

 C #实现FTP客户端的案例

  

核心代码如下

        使用系统;   使用System.Collections.Generic;   使用先;   使用来;   使用System.Net;   使用text;   使用System.Threading;   使用System.Threading.Tasks;      名称空间FtpClient   {   公开课FtpHelper   {   #地区属性与构造函数///& lt; summary>///IP地址///& lt;/summary>   公共字符串IpAddr{得到;设置;}///& lt; summary>///相对路径///& lt;/summary>   公共字符串RelatePath{得到;设置;}///& lt; summary>///端口号///& lt;/summary>   公共字符串端口{得到;设置;}///& lt; summary>///用户名///& lt;/summary>   公共字符串的用户名{;设置;}///& lt; summary>///密码///& lt;/summary>   公共字符串密码{得到;设置;}            公共FtpHelper () {      }      港口ipAddr公共FtpHelper(字符串,字符串,字符串的用户名,字符串密码){   这一点。IpAddr=IpAddr;   这一点。端口=端口;   这一点。用户名=用户名;   这一点。密码=密码;   }      # endregion      #地区方法///& lt; summary>///下载文件///& lt;/summary>///& lt;参数name=" filePath祝辞& lt;/param>///& lt;参数name=" isOk祝辞& lt;/param>   公共空间下载(字符串filePath bool isOk) {   字符串方法=WebRequestMethods.Ftp.DownloadFile;   var statusCode=FtpStatusCode.DataAlreadyOpen;   FtpWebResponse响应=callFtp(方法);   ReadByBytes (filePath、响应statusCode isOk);   }      公共空间上传(字符串文件,bool isOk)   {   isOk=false;   FileInfo fi=new FileInfo(文件);   文件流fs=fi.OpenRead ();   长度=fs.Length;   字符串uri=字符串。格式(“ftp://{0}:{1}{2}”,这一点。IpAddr,这。港口,this.RelatePath);   FtpWebRequest请求=(FtpWebRequest) WebRequest.Create (uri);   请求。凭证=new NetworkCredential(用户名、密码);   请求。方法=WebRequestMethods.Ftp.UploadFile;   请求。UseBinary=true;   请求。ContentLength=长度;   请求。Timeout=10 * 1000;   试一试   {   流流=request.GetRequestStream ();      int BufferLength=2048;//2 k   byte [] b=新的字节(BufferLength);   int我;   ((我=fs。读(b, 0, BufferLength))比;0)   {   流。写(0 b,我);   }   stream.Close ();   stream.Dispose ();   isOk=true;   }   捕获(异常交货)   {   Console.WriteLine (ex.ToString ());   }   最后{   如果(请求!=null)   {   request.Abort ();   请求=零;   }   }   }///& lt; summary>///删除文件///& lt;/summary>///& lt;参数name=" isOk祝辞& lt;/param>///& lt; returns> & lt;/returns>   bool isOk公共string [] DeleteFile () {   字符串方法=WebRequestMethods.Ftp.DeleteFile;   var statusCode=FtpStatusCode.FileActionOK;   FtpWebResponse响应=callFtp(方法);   statusCode,返回ReadByLine(反应isOk);   }///& lt; summary>///展示目录///& lt;/summary>   公共string [] ListDirectory (bool isOk)   {   字符串方法=WebRequestMethods.Ftp.ListDirectoryDetails;   var statusCode=FtpStatusCode.DataAlreadyOpen;   FtpWebResponse响应=callFtp(方法);   statusCode,返回ReadByLine(反应isOk);   }///& lt; summary>///设置上级目录///& lt;/summary>   公共空间SetPrePath ()   {   字符串relatePath=this.RelatePath;   如果(string.IsNullOrEmpty (relatePath) | | relatePath.LastIndexOf ("/")==0)   {   relatePath=" ";   }   其他{   relatePath=relatePath。Substring (0, relatePath.LastIndexOf ("/"));   }   这一点。RelatePath=RelatePath;   }      # endregion      #地区私有方法///& lt; summary>///调用Ftp,将命令发往Ftp并返回信息///& lt;/summary>///& lt;参数name=胺椒ā痹谝⑼鵉tp的命令& lt;/param>///& lt; returns> & lt;/returns>   私人FtpWebResponse callFtp (string方法)   {   字符串uri=字符串。格式(“ftp://{0}:{1}{2}”,这一点。IpAddr,这。港口,this.RelatePath);   FtpWebRequest请求;请求=(FtpWebRequest) FtpWebRequest.Create (uri);   请求。UseBinary=true;   请求。UsePassive=true;   请求。凭证=new NetworkCredential(用户名、密码);   请求。KeepAlive=false;   请求。方法=方法;   FtpWebResponse响应=(FtpWebResponse) request.GetResponse ();   返回响应;   }///& lt; summary>///按行读?//& lt;/summary>///& lt;参数name=跋煊Α弊4? lt;/param>///& lt;参数name=" statusCode祝辞& lt;/param>///& lt;参数name=" isOk祝辞& lt;/param>///& lt; returns> & lt;/returns>   私人string [] ReadByLine (FtpWebResponse响应,FtpStatusCode statusCode, bool isOk) {   List

c#实现FTP客户端的案例