好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

 

   }

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

原文链接:http://HdhCmsTestcnblogs测试数据/cbread/p/6202069.html

dy("nrwz");

查看更多关于C#利用SFTP实现上传下载的详细内容...

  阅读:43次