C#通过SFTP协议操作文件

摘要:
本文主要是C#调用SSH实现文件上传下载功能,主要是要引用第三方类库Tamir.SharpSSH.dll。

本文主要是C#调用SSH实现文件上传下载功能,主要是要引用第三方类库Tamir.SharpSSH.dll。

以下是SFTPHelper类,实现了对文件的操作,可供参考。

 public classSFTPHelper
    {
        privateSession m_session;
        privateChannel m_channel;
        privateChannelSftp m_sftp;

        //host:sftp地址   user:用户名   pwd:密码        
        public SFTPHelper(string host, string user, stringpwd)
        {
            string[] arr = host.Split(':');
            string ip = arr[0];
            int port = 22;
            if (arr.Length > 1) port = Int32.Parse(arr[1]);

            JSch jsch = newJSch();
            m_session =jsch.getSession(user, ip, port);
            MyUserInfo ui = newMyUserInfo();
            ui.setPassword(pwd);
            m_session.setUserInfo(ui);

        }

        //SFTP连接状态        
        public bool Connected { get { returnm_session.isConnected(); } }

        //连接SFTP        
        public boolConnect()
        {
            try{
                if (!Connected)
                {
                    m_session.connect();
                    m_channel = m_session.openChannel("sftp");
                    m_channel.connect();
                    m_sftp =(ChannelSftp)m_channel;
                }
                return true;
            }
            catch{
                return false;
            }
        }

        //断开SFTP        
        public voidDisconnect()
        {
            if(Connected)
            {
                m_channel.disconnect();
                m_session.disconnect();
            }
        }

        //SFTP存放文件        
        public bool Put(string localPath, stringremotePath)
        {
            try{
                Tamir.SharpSsh.java.String src = newTamir.SharpSsh.java.String(localPath);
                Tamir.SharpSsh.java.String dst = newTamir.SharpSsh.java.String(remotePath);
                m_sftp.put(src, dst);
                return true;
            }
            catch{
                return false;
            }
        }

        //SFTP获取文件        
        public bool Get(string remotePath, stringlocalPath)
        {
            try{
                Tamir.SharpSsh.java.String src = newTamir.SharpSsh.java.String(remotePath);
                Tamir.SharpSsh.java.String dst = newTamir.SharpSsh.java.String(localPath);
                m_sftp.get(src, dst);
                return true;
            }
            catch{
                return false;
            }
        }
        //删除SFTP文件
        public bool Delete(stringremoteFile)
        {
            try{
                m_sftp.rm(remoteFile);
                return true;
            }
            catch{
                return false;
            }
        }

        //获取SFTP文件列表        
        public ArrayList GetFileList(string remotePath, stringfileType)
        {
            try{
                Tamir.SharpSsh.java.util.Vector vvv =m_sftp.ls(remotePath);
                ArrayList objList = newArrayList();
                foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq invvv)
                {
                    string sss =qqq.getFilename();
                    if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length -fileType.Length))
                    { objList.Add(sss); }
                    else { continue; }
                }

                returnobjList;
            }
            catch{
                return null;
            }
        }


        //登录验证信息        
        public classMyUserInfo : UserInfo
        {
            String passwd;
            public String getPassword() { returnpasswd; }
            public void setPassword(String passwd) { this.passwd =passwd; }

            public String getPassphrase() { return null; }
            public bool promptPassphrase(String message) { return true; }

            public bool promptPassword(String message) { return true; }
            public bool promptYesNo(String message) { return true; }
            public voidshowMessage(String message) { }
        }

以下是调用方式:

SFTPHelper sftp = new SFTPHelper("xx.xx.xx.xx", "root", "root");
sftp.Connect();
sftp.Get("\a.txt", "E:\");
sftp.Disconnect();

免责声明:文章转载自《C#通过SFTP协议操作文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇notepad++添加自定义语言收录 Uboot 详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

算法--字符串移位问题

转载请标明出处http://www.cnblogs.com/haozhengfei/p/d06ff7b10334cd17ec014764b96790ca.html 字符串移位问题 字符串移位练习题 第7节 字符串移位练习题 对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。 给定一个字符串A和它的长度,同时给定le...

Java泛型讲解

1. 概述在引入泛型之前,Java类型分为原始类型、复杂类型,其中复杂类型分为数组和类。引入范型后,一个复杂类型就可以在细分成更多的类型。例如原先的类型List,现在在细分成List<Object>, List<String>等更多的类型。注意,现在List<Object>, List<String>是两种不...

C++(四十八) — string容器的基本操作

参考博客:https://blog.csdn.net/qq_37941471/article/details/82107077 https://www.cnblogs.com/danielStudy/p/7127564.html#top 1、声明一个字符串 标准库类型string表示可变长的字符序列,为了在程序中使用string类型,我们必须包含头文件:#...

java property 配置文件管理工具框架,避免写入 property 乱序

property property 是 java 实现的 property 框架。 特点 优雅地进行属性文件的读取和更新 写入属性文件后属性不乱序 灵活定义编码信息 使用 OO 的方式操作 property 文件 支持多级对象引用 变更日志 ChangeLog 快速开始 环境依赖 Maven 3.x Jdk 1.7+ Maven 引入依赖 <de...

02_编程规约——集合处理

1.【强制】关于hashCode和equals的处理,必须遵循如下规则 1.1 只要重写equals,就必须重写hashCode。 1.2 因为Set存储的是不重复对象,依据hashCode和equals进行判断,所以Set存储的对象必须重写这两个方法。 1.3 如果自定义对象为Map的键,那么必须重写hashCode和equals。 说明:String重...

Java IO流字符流简介及基本使用

                Java IO流字符流简介及常用字符流的基本使用     字符流分为输入字符流(Writer)和输出字符流(Reader),这两种字符流及其子类字符流都有自己专门的功能。在编码中我们常用的输出字符流有FileWriter、PrintWriter等,而常用的输入字符流有StringReader、FileReader、Buffe...