日期:2014-05-17  浏览次数:21151 次

C# 操作SFTP总结

最近项目中需要用到SFTP来上传,下载文件,经过查资料,POC终于修成正果,先将具体的实现过程写下,方便同样需求的兄弟,姐妹参考。

名字解释

SFTP:SecureFileTransferProtocol的缩写,安全文件传送协议.相对于FTP多了一个加密的过程。

个人总结了一下要实现C#对SFTP的操作(上传,下载,删除,遍历等等)有2种较快的途径

1.购买第三方的类库

2.使用开源的类库(比较流行的:SharpSSH,SshNet)

这里用的是SharpSSH.以下的内容基于SharpSSH。

具体步骤

1.从网站下载SharpSSH的源码(http://www.tamirgal.com/blog/page/SharpSSH.aspx)

这里可以下载源码+Bin文件,注:如果只下载Bin文件,里面的类库是不包含Delete file操作的。

因为项目需求,我们需要对远程文件进行删除,所以下载源码,加入Delete Function,然后重新编译

SharpSSH源码结构


我们需要在Sftp.cs 文件中加入Delete function,如下图所示。


重新编译,然后将生成的3个dll引用到项目中



2.基于SharpSSH,实现SFTP的常用操作

新建一个SFTPHelper.cs

public class SFTPHelper
    {
        private SshTransferProtocolBase m_sshCp;
        private SFTPHelper()
        {

        }
        public SFTPHelper(SshConnectionInfo connectionInfo)
        {
            m_sshCp = new Sftp(connectionInfo.Host, connectionInfo.User);

            if (connectionInfo.Pass != null)
            {
                m_sshCp.Password = connectionInfo.Pass;
            }

            if (connectionInfo.IdentityFile != null)
            {
                m_sshCp.AddIdentityFile(connectionInfo.IdentityFile);
            }
        }

        public bool Connected
        {
            get
            {
                return m_sshCp.Connected;
            }
        }
        public void Connect()
        {
            if (!m_sshCp.Connected)
            {
                m_sshCp.Connect();
            }
        }
        public void Close()
        {
            if (m_sshCp.Connected)
            {