日期:2014-05-17 浏览次数:21297 次
最近项目中需要用到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)
            {