基于C#实现一个简单的FTP操作工具

作者:Csharp 时间:2023-05-12 11:50:58 

实现功能

实现使用FTP上传、下载、重命名、刷新、删除功能

开发环境

开发工具: Visual Studio 2013

.NET Framework版本:4.5

实现代码

/*FTP操作公共类*/

private string FtpIp, FtpPort, FtpUser, FtpPwd, FtpUrl;

private FTPUtil()
 {

}

public FTPUtil(string ftpIp, string ftpPort, string ftpUser, string ftpPwd)
 {
     FtpIp = ftpIp;
     FtpPort = ftpPort;
     FtpUser = ftpUser;
     FtpPwd = ftpPwd;

FtpUrl = "ftp://" + ftpIp + ":" + ftpPort + "/";
 }

private FtpWebRequest GetFtpWebRequest(string path, string method)
 {
     FtpWebRequest Ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(FtpUrl + "/" + path));
     Ftp.Credentials = new NetworkCredential(FtpUser, FtpPwd);
     Ftp.KeepAlive = false;
     Ftp.UsePassive = true;
     Ftp.Method = method;
     return Ftp;
 }

/// <summary>
 /// 获取路径下所有文件夹
 /// </summary>
 /// <param name="dirName"></param>
 /// <returns></returns>
 public List<FileModel> GetDirs(string dirName)
 {
     return GetAllFiles(dirName).FindAll(s => s.Type == "文件夹");
 }

/// <summary>
 /// 获取路径下所有文件
 /// </summary>
 /// <param name="dirName"></param>
 /// <returns></returns>
 public List<FileModel> GetFiles(string dirName)
 {
     return GetAllFiles(dirName).FindAll(s => s.Type == "文件");
 }

/// <summary>
 /// 获取路径下所有项目
 /// </summary>
 /// <param name="dirName"></param>
 /// <returns></returns>
 public List<FileModel> GetAllFiles(string dirName)
 {
     List<FileModel> fileList = new List<FileModel>();
     try
     {
         FtpWebRequest Ftp = GetFtpWebRequest(dirName, WebRequestMethods.Ftp.ListDirectoryDetails);

using (WebResponse response = Ftp.GetResponse())
         {
             using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
             {
                 string line = "";
                 while ((line = reader.ReadLine()) != null)
                 {
                     fileList.Add(ConvertFile(line, dirName));
                 }
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
     return fileList;
 }

/// <summary>
 /// FTP文件信息转换
 /// </summary>
 /// <param name="value"></param>
 /// <param name="dirName"></param>
 /// <returns></returns>
 private FileModel ConvertFile(string value, string dirName)
 {
     string[] arr = value.Split(new string[] { " " },4, StringSplitOptions.RemoveEmptyEntries);

FileModel model = new FileModel();
     model.Date = arr[0];
     model.Time = arr[1];
     if (arr[2] == "<DIR>")
     {
         model.Type = "文件夹";
         model.Size = 0;
     }
     else
     {
         model.Type = "文件";
         model.Size = Convert.ToInt64(arr[2]);
     }
     model.Name = arr[3];
     model.FullName = dirName + "/" + model.Name;
     return model;
 }

/// <summary>
 /// 上传
 /// </summary>
 /// <param name="fileName"></param>
 /// <param name="desFile"></param>
 public void Upload(string fileName, string desFile)
 {
     try
     {
         FileInfo fileInfo = new FileInfo(fileName);

FtpWebRequest Ftp = GetFtpWebRequest(desFile, WebRequestMethods.Ftp.UploadFile);
         Ftp.UseBinary = true;
         Ftp.ContentLength = fileInfo.Length;

int buffLength = 2048;
         byte[] buff = new byte[buffLength];
         int len = 0;
         using (FileStream fs = fileInfo.OpenRead())
         {
             using (Stream stream = Ftp.GetRequestStream())
             {
                 while ((len = fs.Read(buff, 0, buffLength)) != 0)
                 {
                     stream.Write(buff, 0, buffLength);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }

}

/// <summary>
 /// 下载
 /// </summary>
 /// <param name="fileName"></param>
 /// <param name="desFile"></param>
 public void DownLoad(string fileName, string desFile)
 {
     try
     {
         FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.DownloadFile);
         Ftp.UseBinary = true;

FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();
         int buffLength = 2048;
         byte[] buff = new byte[buffLength];
         int len = 0;
         using (FileStream fs = new FileStream(desFile, FileMode.Create))
         {
             using (Stream stream = response.GetResponseStream())
             {
                 while ((len = stream.Read(buff, 0, buffLength)) != 0)
                 {
                     fs.Write(buff, 0, buffLength);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }

/// <summary>
 /// 删除文件
 /// </summary>
 /// <param name="fileName"></param>
 public void DeleteFile(string fileName)
 {
     try
     {
         FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.DeleteFile);

FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();

using (Stream datastream = response.GetResponseStream())
         {
             using (StreamReader sr = new StreamReader(datastream))
             {
                 sr.ReadToEnd();
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }

/// <summary>
 /// 重命名
 /// </summary>
 /// <param name="fileName"></param>
 /// <param name="newName"></param>
 public void ReName(string fileName, string newName)
 {
     try
     {
         FtpWebRequest Ftp = GetFtpWebRequest(fileName, WebRequestMethods.Ftp.Rename);
         Ftp.RenameTo = newName;
         Ftp.UseBinary = true;

FtpWebResponse response = (FtpWebResponse)Ftp.GetResponse();

using (Stream datastream = response.GetResponseStream())
         {
             using (StreamReader sr = new StreamReader(datastream))
             {
                 sr.ReadToEnd();
             }
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }

实现效果

FTP 操作工具视频演示

来源:https://blog.csdn.net/qq_27410185/article/details/124608445

标签:C#,FTP,操作
0
投稿

猜你喜欢

  • Android UI设计与开发之仿人人网V5.9.2最新版引导界面

    2022-10-10 17:34:16
  • java 完全二叉树的构建与四种遍历方法示例

    2022-03-21 00:48:04
  • SpringBoot浅析Redis访问操作使用

    2022-09-26 02:09:18
  • Java操作Redis2种方法代码详解

    2022-09-10 22:58:56
  • Java多线程实现第三方数据同步

    2023-06-30 10:57:57
  • emoji表情与unicode编码互转的实现(JS,JAVA,C#)

    2023-02-07 06:07:48
  • C#采用HttpWebRequest实现保持会话上传文件到HTTP的方法

    2023-07-18 17:20:29
  • C++ 线程(串行 并行 同步 异步)详解

    2023-07-18 18:09:43
  • Java动态代理静态代理实例分析

    2023-11-14 18:06:07
  • java实现dijkstra最短路径寻路算法

    2021-10-23 06:29:58
  • Java Comparable及Comparator接口区别详解

    2023-07-03 08:19:50
  • 简述IDEA集成Git在实际项目中的运用

    2022-06-30 20:43:05
  • Java编程中ArrayList源码分析

    2023-05-20 00:05:25
  • Android中FoldingLayout折叠布局的用法及实战全攻略

    2021-05-23 19:29:17
  • Mybatis 缓存原理及失效情况解析

    2022-12-04 07:28:43
  • Android实现悬浮窗的简单方法实例

    2023-06-17 18:11:02
  • Java 两种延时thread和timer详解及实例代码

    2022-08-30 03:42:14
  • Java使用雪花id生成算法详解

    2023-11-18 21:58:49
  • SpringBoot搭配AOP实现自定义注解

    2022-04-07 01:21:59
  • C++中auto_ptr智能指针的用法详解

    2023-05-21 02:14:05
  • asp之家 软件编程 m.aspxhome.com