博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 通过 Renci.SshNet 实现SFTP数据传输
阅读量:6527 次
发布时间:2019-06-24

本文共 5803 字,大约阅读时间需要 19 分钟。

新建一个工程,引用 ,SFTP操作类如下:

using System;using System.Collections;using System.IO;using Renci.SshNet;/************************描述 SFTP操作类********************************************创建者  : FYF**创建时间: 2015-03-11**描述    : SFTP操作类**注意    : 所有远程目录或路径可包含工作目录(sftp.WorkingDirectory),此时路径以"/"开头;也可以不包含工作目录,此时路径不以"/"开头** 履历   :No.         日期           修改人                 描述*********************************************************************************/namespace IF.Utility{    ///     /// SFTP操作类    ///     public class SFTPOperation    {        #region 字段或属性        private SftpClient sftp;        ///         /// SFTP连接状态        ///         public bool Connected { get { return sftp.IsConnected; } }        #endregion        #region 构造        ///         /// 构造        ///         /// IP        /// 端口        /// 用户名        /// 密码        public SFTPOperation(string ip, string port, string user, string pwd)        {            sftp = new SftpClient(ip, Int32.Parse(port), user, pwd);        }        #endregion        #region 连接SFTP        ///         /// 连接SFTP        ///         /// 
true成功
public bool Connect() { try { if (!Connected) { sftp.Connect(); } return true; } catch (Exception ex) { throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message)); } } #endregion #region 断开SFTP /// /// 断开SFTP /// public void Disconnect() { try { if (sftp != null && Connected) { sftp.Disconnect(); } } catch (Exception ex) { throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message)); } } #endregion #region SFTP上传文件 /// /// SFTP上传文件 /// /// 本地路径 /// 远程路径 public void Put(string localPath, string remotePath) { try { using (var file = File.OpenRead(localPath)) { Connect(); sftp.UploadFile(file, remotePath); Disconnect(); } } catch (Exception ex) { throw new Exception(string.Format("SFTP文件上传失败,原因:{0}", ex.Message)); } } #endregion #region SFTP获取文件 /// /// SFTP获取文件 /// /// 远程路径 /// 本地路径 public void Get(string remotePath, string localPath) { try { Connect(); var byt = sftp.ReadAllBytes(remotePath); Disconnect(); File.WriteAllBytes(localPath, byt); } catch (Exception ex) { throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message)); } } #endregion #region 删除SFTP文件 /// /// 删除SFTP文件 /// /// 远程路径 public void Delete(string remoteFile) { try { Connect(); sftp.Delete(remoteFile); Disconnect(); } catch (Exception ex) { throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message)); } } #endregion #region 获取SFTP文件列表 /// /// 获取SFTP文件列表 /// /// 远程目录 /// 文件后缀 ///
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) { throw new Exception(string.Format("SFTP文件列表获取失败,原因:{0}", ex.Message)); } } #endregion #region 移动SFTP文件 /// /// 移动SFTP文件 /// /// 旧远程路径 /// 新远程路径 public void Move(string oldRemotePath, string newRemotePath) { try { Connect(); sftp.RenameFile(oldRemotePath, newRemotePath); Disconnect(); } catch (Exception ex) { throw new Exception(string.Format("SFTP文件移动失败,原因:{0}", ex.Message)); } } #endregion }}
测试代码片段如下:

private void btn_Start_Click(object sender, EventArgs e)        {            //var test = new SFTPOperation("172.28.103.9", "22", "sftp02", "sftp02");            var test = new SFTPOperation("172.28.103.9", "22", "sftp01", "sftp01");            // 上传文件            test.Put("D:/Download/ResourceSharp/test.txt", "china/in/test.txt");             获取文件列表            //var list = test.GetFileList("china/in", "zip");            //foreach (var name in list)            //{            //    // 获取文件            //    test.Get("china/in/" , "D:/Download/ResourceSharp/" + name);            //    Console.WriteLine(name);            //}             删除文件            //test.Delete("china/in/aaa.txt");             移动文件            //test.Move("china/in/test.txt", "china/test.txt");                    }
完整测试代码下载地址:

原文地址:http://blog.csdn.net/iuhiqnehc/article/details/21074427

你可能感兴趣的文章
win7 x64 jdk1.7.0_51
查看>>
45 Useful Oracle Queries--ref
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
小菜学习设计模式(四)—原型(Prototype)模式
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>
使用ShellExecute打开目标文件所在文件夹并选中目标文件
查看>>
Lombok简化Java代码的好工具
查看>>
HDU 4614 Vases and Flowers (2013多校2 1004 线段树)
查看>>
Minix中的字符判定ctype.c
查看>>
91平台iOS接入demo
查看>>
五个优秀的硬盘检测工具
查看>>
用js实现table内容从下到上连续滚动
查看>>
基于ffmpeg的流媒体服务器
查看>>
项目积累——Blockingqueue,ConcurrentLinkedQueue,Executors
查看>>
JVM学习笔记(一)------基本结构
查看>>
[开源]一个完整的黄页小程序
查看>>
git flow在Vue项目中的应用
查看>>
结合 Android 看看单例模式怎么写
查看>>
[译] PWA 实战:Tinder 的性能优化之道
查看>>