首页 > 编程 > C# > 正文

C#利用SFTP实现上传下载

2020-01-24 00:26:30
字体:
来源:转载
供稿:网友

sftp是ftp协议的升级版本,是牺牲上传速度为代价,换取安全性能,本人开始尝试使用Tamir.SharpSSH.dll但它对新版本的openssh 不支持,所有采用Ssh.Net方式 需要依赖:Renci.SshNet.dll 下载链接

/// <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  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表