C# 通过 Renci.SshNet 实现SFTP数据传输

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

using System;
using System.Collections;
using System.IO;

using Renci.SshNet;

/************************描述 SFTP操作类******************************************
**创建者  : FYF
**创建时间: 2015-03-11
**描述    : SFTP操作类
**注意    : 所有远程目录或路径可包含工作目录(sftp.WorkingDirectory),此时路径以"/"开头;也可以不包含工作目录,此时路径不以"/"开头
** 履历   :No.         日期           修改人                 描述
*********************************************************************************/

namespace IF.Utility
{
    /// <summary>
    /// SFTP操作类
    /// </summary>
    public class SFTPOperation
    {
        #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 SFTPOperation(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)
            {
                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)
            {
                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)
            {
                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)
            {
                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)
            {
                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)
            {
                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)
            {
                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");

        }

完整测试代码下载地址:C# 通过 Renci.SshNet 实现SFTP数据传输

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

时间: 2024-09-12 02:50:48

C# 通过 Renci.SshNet 实现SFTP数据传输的相关文章

PowerShell小技巧之尝试ssh登录_PowerShell

在PSNet程序集中继续进行扩展,在$env:PSSpace/PSNet/TCPOp/下创建Invoke-SSHLogin.ps1脚本用于在传入指定ssh地址.用户名和密码后返回是否登录成功. 在$env:PSSpace/PSNet/下创建Lib目录用于存放在脚本中需要使用的第三方库,由于在本文中需要引用Renci.SshNet.dll用户可以从http://sshnet.codeplex.com/releases/view/72214中下载程序,解压后将文件放置在$env:PSSpace/PS

php中使用sftp教程

 这篇文章主要介绍了php中使用sftp教程,本文讲解了ftp 协议简介.ssh协议.sftp 协议等知识,并给出了FTP和SFTP操作类实现代码,需要的朋友可以参考下     ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

Linux下为不使用SSH的用户提供SFTP服务环境

  SFTP sftp是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.sftp 与 ftp 有着几乎一样的语法和功能.SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式.其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连

FTPS(基于 SSL 的FTP)与 SFTP(SSH 文件传输协议)对比

SSH File transfer protocol(SFTP)也称为通过安全套接层的文件传输协议File Transfer protocol via Secure Socket Layer, 以及 FTPS 都是最常见的安全 FTP 通信技术,用于通过 TCP 协议将计算机文件从一个主机传输到另一个主机.SFTP 和 FTPS 都提供高级别文件传输安全保护,通过强大的算法(如 AES 和 Triple DES)来加密传输的数据. 但是 SFTP 和 FTPS 之间最显着的区别是如何验证和管理连

php中使用sftp教程_php技巧

<?php /** php 中的sftp 使用教程 Telnet.FTP.SSH.SFTP.SSL (一) ftp 协议简介 FTP(File Transfer Protocol,文件传输协议)是互联网上常用的协议之一,人们用FTP实现互连网上的文件传输. 如同其他的很多通讯协议,FTP通讯协议也采用客户机 / 服务器(Client / Server )架构.用户可以通过各种不同的FTP客户端程序, 借助FTP协议,来连接FTP服务器,以上传或者下载文件FTP的命令传输和数据传输是通过不同的端口

python网络编程之数据传输UDP实例分析

  本文实例讲述了python网络编程之数据传输UDP实现方法.分享给大家供大家参考.具体分析如下: 一.问题: 你觉得网络上像msn,qq之类的工具在多台机器之间互相传输数据神秘吗?你也想玩一下在两台机器之间传数据吗?今天让python告诉我们基本原理吧,当然只是做简单的了解,实际情况复杂的多. 我们今天用python实现一个简单的udp程序. 二.程序实现: 1) 使用模块 (socket)套接字模块: 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问 .使用

最小化数据传输——在客户端存储数据

客户端|数据 将程序输出为其他的语言是程序员喜爱的事情之一,在WEB上我们有 两个不同编程环境:客户端(浏览器)和服务器端,根据HTTP协议的定义, 我们可以在编写在客户端输出其他语言的服务端程序,我们选择了作为服 务端语言.javascript作为客户端输出.在本问中我们将向您演示这样用 该方案把数据存储在客户端,并且在诸如:聊天室.新闻系统或其他您想 实现的应用上达到服务端和客户端(浏览器)的最小的数据传输. 要求以下支持:     PHP4     JavaScript     Frame

fpga-两个FPGA芯片数据传输

问题描述 两个FPGA芯片数据传输 40C 求代码-加q. 1718686998用VHDL设计--------波特率是19200.....其他没有什么要求 解决方案 http://wenku.baidu.com/link?url=sEji1bEz4-dlWzFNL6GXgCDFX7muGgNKeiesv1LNqdbSSDhVCcHvRJZOoO3pXS2arTelYpK66X-pBK3IjpUE4DwfUwIYpUIJ_irDiIPZXkm

android-安卓官方网络数据传输框架是什么?

问题描述 安卓官方网络数据传输框架是什么? The android official framework of network data transmitting is ? 如题,哪个大神告诉我一下答案吧,谢谢. 解决方案 volley,谷歌的