C#通过SFTP协议操作文件

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

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

 public class SFTPHelper
    {
        private Session m_session;
        private Channel m_channel;
        private ChannelSftp m_sftp;

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

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

        }

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

        //连接SFTP
        public bool Connect()
        {
            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 void Disconnect()
        {
            if (Connected)
            {
                m_channel.disconnect();
                m_session.disconnect();
            }
        }

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

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

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

                return objList;
            }
            catch
            {
                return null;
            }
        }

        //登录验证信息
        public class MyUserInfo : UserInfo
        {
            String passwd;
            public String getPassword() { return passwd; }
            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 void showMessage(String message) { }
        }

以下是调用方式:

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

时间: 2024-10-06 18:56:39

C#通过SFTP协议操作文件的相关文章

树莓派ssh连接并使用sftp协议拷贝文件到电脑

折腾了一上午,觉得实在不爽所以要记录一下,省得以后犯同样的错误! 如果你发现你的树莓派直连电脑,设置好了IP就是连不上,恭喜你,你的树莓派可能没有打开SSH!! 所以建议先插屏幕检查一下,我这里不是为了讲怎么无屏幕开发,我是想重新刷个系统,然后把原来的东西通过sftp协议拷贝下来. 首先你最好看看你是否打开了SSH功能: 执行命令 service ssh status 确认一下SSH服务状态. 从上图可以看到,状态为inactive.很明显,就是没有启用! 然后你就启用它!两个方法. 一. 使用

文件系统之-JAVA Sftp远程操作:

转载:http://blog.csdn.net/lee272616/article/details/52789018 java远程操作文件服务器(linux),使用sftp协议版本会持续更新,当前版本:0.31版本更新时间:2016-10-13版本修正说明:1.修正连接关闭,将关闭的方法改成私有,不允许使用者自行关闭(否则会导致连接池获取错误) 2.优化删除文件及文件夹,先判断文件或文件夹是否存在,然后再删除 前言: sftp是Secure File Transfer Protocol的缩写,安

.net 对sftp服务器上文件的操作

由于服务商从FTP服务器迁移到SFTP服务器,唉~~~,苦逼的我们就改来该去的吧.现在来稍微说说这个是怎么实现的. ----------------------------------------我是无耻的分割线------------------------------------------------------------ 就不赘述FTP和SFTP的区别了,只提一点在一定的程度上后者更安全,需要的同学请移步http://www.cnblogs.com/mfryf/archive/2013

java通过sftp上传文件

转载:http://blog.csdn.net/yhl_jxy/article/details/72633034 Linux操作系统我们经常使用ssh中的ftp,sftp连接服务器,做相应操作. 如何通过java代码的形式采用sftp连接到服务器,进行文件上传下载等操作呢? 第一步,引入依赖包 [html] view plain copy <!-- sftp上传依赖包 --> <dependency> <groupId>com.jcraft</groupId>

git bash 常用操作文件命令

git bash常用操作文件命令 在Windows下使用Git Bash,用的是Linux命令,常用几个文件操作命令如下: Windows命令 Linux 命令 意义 Windows命令 Linux 命令 意义 cd e:\xxx cd /e/xxx 切换到xxx目录 cd pwd 显示当前目录路径 dir ls 列出当前目录内容 copy nul xxx.txt touch xxx.txt 生成名为xxx.txt的空文件 del xxx.txt rm xxx.txt 删除xxx.txt文件 m

Python IO编程——操作文件和目录

1.1   操作文件和目录 >>> import os >>> os.name     #操作系统类型 'posix' >>> os.uname()     #详细的系统信息 posix.uname_result(sysname='Linux',nodename='daidai.com', release='2.6.18-194.el5', version='#1 SMP Tue Mar 1621:52:39 EDT 2010', machine='x

操作文件方法简单总结(File,Directory,StreamReader,StreamWrite ) - Zery-zhang

一 基本介绍 操作文档,文件夹,需要用到的类 1 Directory (静态类) :      用于创建.移动和删除等操作通过 目录 和子 目录 DirectoryInfo (非静态): 2 File (静态类)  : 提供用于创建.复制.删除.移动和打开文件的静态类,并协助创建 FileStream 对象 FileInfo (非静态) 3 StreamReader : 实现一个 TextReader,使其以一种特定的编码从字节流中读取字符 StreamWriter : 实现一个 TextWri

python读写操作文件

with open(xxx,'r,coding='utf-8') as f:   #打开文件赋值给F ,并且执行完了之后不需要 f.close(). 在Python 2.7 及以后,with又支持同时对多个文件的上下文进行管理,即:with open('log1') as obj1, open('log2') as obj2: f.tell          #获取指针位置 f.seek(1)   #调整指针位置 f.writ()     #往文件里面些东西  并切指针到最后 r.read() 

python, 操作文件和目录

操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数 基本功能 import os #操作系统类型 os.name #posix:Linux.Unix或Mac OS X,nt:Windows系统 #要获取详细的系统信息,Windows上不提供 os.uname() #环境变量查看 os.environ #要获取某个环境变量的值,可以调用os.environ.get('key') os.environ.get('PATH') os