C# FTP操作工具

上面一篇已经发视频展示了FTP工具的操作使用,所以这一篇放一下主要源代码;

篇幅有限,这里就放一下操作FTP公共类代码;

其他的也没什么功能,一个页面展示(主要是TreeView控件和ListView控件),还有一个就是获取本地的文件(DirectoryInfo类)

实现功能:

实现使用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 操作工具视频演示

由简入繁,拿来即用

更多精彩,请关注微信公众号:

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值