C# FTP下载 采用Ssh.Net方式

不要再用FTPClient了

nuget下载Ssh.Net

然后代码如下:

cs 复制代码
/// <summary>
  /// SFTP操作类
  /// </summary>
  public class SFTPHelper
  {
    #region 字段或属性
    private SftpClient sftp;
    /// <summary>
    /// SFTP连接状态
    /// </summary>
    public bool Connected { get { return sftp.IsConnected; } }
    #endregion

    #region 构造
    /// <summary>
    /// 构造
    /// </summary>
    /// <param name="ip">IP</param>
    /// <param name="port">端口</param>
    /// <param name="user">用户名</param>
    /// <param name="pwd">密码</param>
    public SFTPHelper(string ip, string port, string user, string pwd)
    {
      sftp = new SftpClient(ip, Int32.Parse(port), user, pwd);
    }
    #endregion

    #region 连接SFTP
    /// <summary>
    /// 连接SFTP
    /// </summary>
    /// <returns>true成功</returns>
    public bool Connect()
    {
      try
      {
        if (!Connected)
        {
          sftp.Connect();
        }
        return true;
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("连接SFTP失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message));
      }
    }
    #endregion

    #region 断开SFTP
    /// <summary>
    /// 断开SFTP
    /// </summary> 
    public void Disconnect()
    {
      try
      {
        if (sftp != null && Connected)
        {
          sftp.Disconnect();
        }
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("断开SFTP失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message));
      }
    }
    #endregion

    #region SFTP上传文件
    /// <summary>
    /// SFTP上传文件
    /// </summary>
    /// <param name="localPath">本地路径</param>
    /// <param name="remotePath">远程路径</param>
    public void Put(string localPath, string remotePath)
    {
      try
      {
        using (var file = File.OpenRead(localPath))
        {
          Connect();
          sftp.UploadFile(file, remotePath);
          Disconnect();
        }
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件上传失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("SFTP文件上传失败,原因:{0}", ex.Message));
      }
    }
    #endregion

    #region SFTP获取文件
    /// <summary>
    /// SFTP获取文件
    /// </summary>
    /// <param name="remotePath">远程路径</param>
    /// <param name="localPath">本地路径</param>
    public void Get(string remotePath, string localPath)
    {
      try
      {
        Connect();
        var byt = sftp.ReadAllBytes(remotePath);
        Disconnect();
        File.WriteAllBytes(localPath, byt);
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
      }

    }
    #endregion

    #region 删除SFTP文件
    /// <summary>
    /// 删除SFTP文件 
    /// </summary>
    /// <param name="remoteFile">远程路径</param>
    public void Delete(string remoteFile)
    {
      try
      {
        Connect();
        sftp.Delete(remoteFile);
        Disconnect();
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件删除失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message));
      }
    }
    #endregion

    #region 获取SFTP文件列表
    /// <summary>
    /// 获取SFTP文件列表
    /// </summary>
    /// <param name="remotePath">远程目录</param>
    /// <param name="fileSuffix">文件后缀</param>
    /// <returns></returns>
    public ArrayList GetFileList(string remotePath, string fileSuffix)
    {
      try
      {
        Connect();
        var files = sftp.ListDirectory(remotePath);
        Disconnect();
        var objList = new ArrayList();
        foreach (var file in files)
        {
          string name = file.Name;
          if (name.Length > (fileSuffix.Length + 1) && fileSuffix == name.Substring(name.Length - fileSuffix.Length))
          {
            objList.Add(name);
          }
        }
        return objList;
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
      }
    }
    #endregion

    #region 移动SFTP文件
    /// <summary>
    /// 移动SFTP文件
    /// </summary>
    /// <param name="oldRemotePath">旧远程路径</param>
    /// <param name="newRemotePath">新远程路径</param>
    public void Move(string oldRemotePath, string newRemotePath)
    {
      try
      {
        Connect();
        sftp.RenameFile(oldRemotePath, newRemotePath);
        Disconnect();
      }
      catch (Exception ex)
      {
        // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件移动失败,原因:{0}", ex.Message));
        throw new Exception(string.Format("SFTP文件移动失败,原因:{0}", ex.Message));
      }
    }
    #endregion

  }

调用:

cs 复制代码
   SFTPHelper sFTPHelper = new SFTPHelper("172.0.0.1", "21", "sftp", "bacd123");
   sFTPHelper.Get("/bak/10001.pdf", "D:\\10001.pdf");
相关推荐
hie988942 小时前
C#与KepOPC通讯
开发语言·c#
hweiyu003 小时前
C#学习教程(附电子书资料)
开发语言·学习·c#
python算法(魔法师版)4 小时前
.NET NativeAOT 指南
java·大数据·linux·jvm·.net
csdn_aspnet5 小时前
C# DataGridView 选中所有复选框
c#·winform·datagridview
qq_297908017 小时前
c#车检车构客户管理系统软件车辆年审短信提醒软件
sqlserver·c#·开源软件
jinlei20097 小时前
配置ssh服务-ubuntu到Windows拷贝文件方法
运维·ubuntu·ssh
酷炫码神8 小时前
C#数组与集合
开发语言·c#
钢铁男儿8 小时前
C# 深入理解类(静态函数成员)
java·开发语言·c#
bbsh20998 小时前
动易.NET系列产品:Safari浏览器登录后台提示登录信息过期的问题
java·.net·safari
ALex_zry14 小时前
SSH主机密钥验证失败:全面解决方案与技术手册
运维·ssh