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

  1. /// <summary>
  2. /// SFTP操作类
  3. /// </summary>
  4. public class SFTPHelper
  5. {
  6. #region 字段或属性
  7. private SftpClient sftp;
  8. /// <summary>
  9. /// SFTP连接状态
  10. /// </summary>
  11. public bool Connected { get { return sftp.IsConnected; } }
  12. #endregion
  13.  
  14. #region 构造
  15. /// <summary>
  16. /// 构造
  17. /// </summary>
  18. /// <param name="ip">IP</param>
  19. /// <param name="port">端口</param>
  20. /// <param name="user">用户名</param>
  21. /// <param name="pwd">密码</param>
  22. public SFTPHelper(string ip, string port, string user, string pwd)
  23. {
  24. sftp = new SftpClient(ip, Int32.Parse(port), user, pwd);
  25. }
  26. #endregion
  27.  
  28. #region 连接SFTP
  29. /// <summary>
  30. /// 连接SFTP
  31. /// </summary>
  32. /// <returns>true成功</returns>
  33. public bool Connect()
  34. {
  35. try
  36. {
  37. if (!Connected)
  38. {
  39. sftp.Connect();
  40. }
  41. return true;
  42. }
  43. catch (Exception ex)
  44. {
  45. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("连接SFTP失败,原因:{0}", ex.Message));
  46. throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message));
  47. }
  48. }
  49. #endregion
  50.  
  51. #region 断开SFTP
  52. /// <summary>
  53. /// 断开SFTP
  54. /// </summary>
  55. public void Disconnect()
  56. {
  57. try
  58. {
  59. if (sftp != null && Connected)
  60. {
  61. sftp.Disconnect();
  62. }
  63. }
  64. catch (Exception ex)
  65. {
  66. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("断开SFTP失败,原因:{0}", ex.Message));
  67. throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message));
  68. }
  69. }
  70. #endregion
  71.  
  72. #region SFTP上传文件
  73. /// <summary>
  74. /// SFTP上传文件
  75. /// </summary>
  76. /// <param name="localPath">本地路径</param>
  77. /// <param name="remotePath">远程路径</param>
  78. public void Put(string localPath, string remotePath)
  79. {
  80. try
  81. {
  82. using (var file = File.OpenRead(localPath))
  83. {
  84. Connect();
  85. sftp.UploadFile(file, remotePath);
  86. Disconnect();
  87. }
  88. }
  89. catch (Exception ex)
  90. {
  91. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件上传失败,原因:{0}", ex.Message));
  92. throw new Exception(string.Format("SFTP文件上传失败,原因:{0}", ex.Message));
  93. }
  94. }
  95. #endregion
  96.  
  97. #region SFTP获取文件
  98. /// <summary>
  99. /// SFTP获取文件
  100. /// </summary>
  101. /// <param name="remotePath">远程路径</param>
  102. /// <param name="localPath">本地路径</param>
  103. public void Get(string remotePath, string localPath)
  104. {
  105. try
  106. {
  107. Connect();
  108. var byt = sftp.ReadAllBytes(remotePath);
  109. Disconnect();
  110. File.WriteAllBytes(localPath, byt);
  111. }
  112. catch (Exception ex)
  113. {
  114. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
  115. throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
  116. }
  117.  
  118. }
  119. #endregion
  120.  
  121. #region 删除SFTP文件
  122. /// <summary>
  123. /// 删除SFTP文件
  124. /// </summary>
  125. /// <param name="remoteFile">远程路径</param>
  126. public void Delete(string remoteFile)
  127. {
  128. try
  129. {
  130. Connect();
  131. sftp.Delete(remoteFile);
  132. Disconnect();
  133. }
  134. catch (Exception ex)
  135. {
  136. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件删除失败,原因:{0}", ex.Message));
  137. throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message));
  138. }
  139. }
  140. #endregion
  141.  
  142. #region 获取SFTP文件列表
  143. /// <summary>
  144. /// 获取SFTP文件列表
  145. /// </summary>
  146. /// <param name="remotePath">远程目录</param>
  147. /// <param name="fileSuffix">文件后缀</param>
  148. /// <returns></returns>
  149. public ArrayList GetFileList(string remotePath, string fileSuffix)
  150. {
  151. try
  152. {
  153. Connect();
  154. var files = sftp.ListDirectory(remotePath);
  155. Disconnect();
  156. var objList = new ArrayList();
  157. foreach (var file in files)
  158. {
  159. string name = file.Name;
  160. if (name.Length > (fileSuffix.Length + ) && fileSuffix == name.Substring(name.Length - fileSuffix.Length))
  161. {
  162. objList.Add(name);
  163. }
  164. }
  165. return objList;
  166. }
  167. catch (Exception ex)
  168. {
  169. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
  170. throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message));
  171. }
  172. }
  173. #endregion
  174.  
  175. #region 移动SFTP文件
  176. /// <summary>
  177. /// 移动SFTP文件
  178. /// </summary>
  179. /// <param name="oldRemotePath">旧远程路径</param>
  180. /// <param name="newRemotePath">新远程路径</param>
  181. public void Move(string oldRemotePath, string newRemotePath)
  182. {
  183. try
  184. {
  185. Connect();
  186. sftp.RenameFile(oldRemotePath, newRemotePath);
  187. Disconnect();
  188. }
  189. catch (Exception ex)
  190. {
  191. // TxtLog.WriteTxt(CommonMethod.GetProgramName(), string.Format("SFTP文件移动失败,原因:{0}", ex.Message));
  192. throw new Exception(string.Format("SFTP文件移动失败,原因:{0}", ex.Message));
  193. }
  194. }
  195. #endregion
  196.  
  197. }

SFTP上传下载(C#)的更多相关文章

  1. THINKPHP 3.2 PHP SFTP上传下载 代码实现方法

     一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议),  只要sshd服 ...

  2. Java Sftp上传下载文件

    需要使用jar包  jsch-0.1.50.jar sftp上传下载实现类 package com.bstek.transit.sftp; import java.io.File; import ja ...

  3. Xshell5下利用sftp上传下载传输文件

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH ...

  4. SFTP上传下载文件、文件夹常用操作

    SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd  d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文 ...

  5. java:工具(汉语转拼音,压缩包,EXCEL,JFrame窗口和文件选择器,SFTP上传下载,FTP工具类,SSH)

    1.汉语转拼音: import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuP ...

  6. java实操之使用jcraft进行sftp上传下载文件

    sftp作为临时的文件存储位置,在某些场合还是有其应景的,比如对账文件存放.需要提供一个上传的工具类.实现方法参考下: pom.xml中引入类库: <dependency> <gro ...

  7. java 实现Serv-U FTP 和 SFTP 上传 下载

    两种ftp使用java的实现方式 ,代码都已测试 第一种:Serv-U FTP 先决条件: 1.Serv-U FTP服务器搭建成功. 2.jar包需要:版本不限制 <!--ftp上传需要的jar ...

  8. java之SFTP上传下载

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.ut ...

  9. sftp 上传下载 命令介绍

    sftp是Secure FileTransferProtocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法. sftp与 ftp有着几乎一样的语法和功能.SFTP为 SSH的一部分 ...

随机推荐

  1. 如何通过java反射将数据库表生成实体类?

    首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有 ...

  2. An Introduction to Interactive Programming in Python

    这是在coursera上面的一门学习pyhton的基础课程,由RICE的四位老师主讲.生动有趣,一共是9周的课程,每一周都会有一个小游戏,经历一遍,对编程会产生很大的兴趣. 所有的程序全部在老师开发的 ...

  3. Java中常见的几种类型转换

    public class Main { public static void main(String[] args){ //Int型数字转换成字符串 int num1=123456; //方法1 St ...

  4. 新建linux组、用户命令

    之前在安装oracle的时候,出现了一个问题:安装Oracle,新建组.用户的时候的一个错误.看这篇博客前,先看这个链接,学习要从解决出现的问题出手. 建立用户组和用户 下面总结一下Linux建立组和 ...

  5. qt 操作word

    //修改doc QString filepath="e:\\aa.doc"; QAxWidget *word = new QAxWidget("Word.Applicat ...

  6. QT动画介绍(有例子可以下载)

    所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情.当然做这件事情,最好用的就是状态机,点击这里查看Qt使用状态机实现动画效果实例. 不过,实现动画也有 ...

  7. CUDA samples 2.3节 用CUDA示例来创建CUDA项目

    2.3.1. Creating CUDA Projects for Windows 略 2.3.2  Creating CUDA Projects for Linux 默认的samples的安装路径 ...

  8. iOS UIWebView 之 UIProgressView

    之前做等待跳转都是用UIActivityIndicatorView ,后来做webView 加载页面的时候,发现了一个特别好用又超级炫酷的加载提示NJKWebViewProgress,作者巧妙的通过计 ...

  9. c++,命名空间(namespace)

    1.什么是命名空间: 命名空间:实际上就是一个由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来. 2.命名空间 ...

  10. android 4.2 root

    前一段因工作需要,对android4.2 进行root.但是在下载了 点击打开链接,下载了Superuser.apk,把对应的apk拷贝到system/app,su拷贝到/system/bin 与/s ...