C#利用SFTP实现上传下载

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

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程宝库

本文为大家分享了C#根据Word模版生成Word文的具体代码,供大家参考。1、指定的word模版2、生成word类添加com Microsoft word 11.0 Object Library 引用u ...