博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Sftp操作
阅读量:4580 次
发布时间:2019-06-09

本文共 8829 字,大约阅读时间需要 29 分钟。

      SFTP释义-----引自

       sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

      准备

      Sftp的上传下载等操作用到了C#的第三方类库SharpSSH,需要添加压缩包中的3个dll文件 (Tamir.SharpSSH.dll、Org.Mentalis.Security.dll、DiffieHellman.dll)      

      在这里给大家介绍微软的一款工具ILMerge,它可以用来将多个dll合并或将dll合并进winform生成的exe程序,笔者这里用来合并上面3个dll,以减少项目的引用方便管理

 

      SftpHelper类-----亲测通过       

  
1 class sftpHelper  2     {  3         private Session m_session;  4         private Channel m_channel;  5         private ChannelSftp m_sftp;  6   7         ///   8         /// 构造函数  9         ///  10         /// sftp地址 11         /// sftp用户名 12         /// sftp密码 13         /// 端口,默认20 14         public sftpHelper(string ip, string user, string pwd, string port = "20") 15         { 16             int serverport = Int32.Parse(port); 17  18             JSch jsch = new JSch(); 19             m_session = jsch.getSession(user, ip, serverport); 20  21             MyUserInfo ui = new MyUserInfo(); 22             ui.setPassword(pwd); 23             m_session.setUserInfo(ui); 24         } 25  26         ///  27         /// 连接状态 28         ///       29         public bool Connected { get { return m_session.isConnected(); } } 30  31         ///  32         /// 连接SFTP 33         ///       34         public bool Connect() 35         { 36             try 37             { 38                 if (!Connected) 39                 { 40                     m_session.connect(); 41                     m_channel = m_session.openChannel("sftp"); 42                     m_channel.connect(); 43                     m_sftp = (ChannelSftp)m_channel; 44                 } 45                 return true; 46             } 47             catch (Exception ex) 48             { 49                 return false; 50             } 51         } 52  53         ///  54         /// 断开SFTP  55         ///   56         public void Disconnect() 57         { 58             if (Connected) 59             { 60                 m_channel.disconnect(); 61                 m_session.disconnect(); 62             } 63         } 64  65         ///  66         /// SFTP存放文件   67         ///   68         /// 本地文件路径 69         /// sftp远程地址 70         public bool Put(string localPath, string remotePath) 71         { 72             try 73             { 74                 if (this.Connected) 75                 { 76                     Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(localPath); 77                     Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(remotePath); 78                     m_sftp.put(src, dst); 79                     return true; 80                 } 81             } 82             catch (Exception ex) 83             { 84                 return false; 85             } 86             return false; 87         } 88  89         ///  90         /// SFTP获取文件   91         ///   92         /// sftp远程文件地址 93         /// 本地文件存放路径   94         public bool Get(string remotePath, string localPath) 95         { 96             try 97             { 98                 if (this.Connected) 99                 {100                     Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(remotePath);101                     Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(localPath);102                     m_sftp.get(src, dst);103                     return true;104                 }105             }106             catch (Exception ex)107             {108                 return false;109             }110             return false;111         }112 113         /// 114         /// 删除SFTP文件  115         ///  116         /// sftp远程文件地址117         public bool Delete(string remoteFile)118         {119             try120             {121                 if (this.Connected)122                 {123                     m_sftp.rm(remoteFile);124                     return true;125                 }126             }127             catch128             {129                 return false;130             }131             return false;132         }133 134 135         /// 136         /// 移动SFTP文件  137         ///  138         /// sftp远程文件地址139         /// sftp移动至文件地址140         public bool Move(string currentFilename, string newDirectory)141         {142             try143             {144                 if (this.Connected)145                 {146                     Tamir.SharpSsh.java.String src = new Tamir.SharpSsh.java.String(currentFilename);147                     Tamir.SharpSsh.java.String dst = new Tamir.SharpSsh.java.String(newDirectory);148                     m_sftp.rename(src, dst);149                     return true;150                 }151             }152             catch (Exception ex)153             {154                 return false;155             }156             return false;157         }158 159         /// 160         /// 获取SFTP文件列表  161         ///  162         /// sftp远程文件目录163         /// 文件类型164         public ArrayList GetFileList(string remotePath, string fileType)165         {166             try167             {168 169                 if (this.Connected)170                 {171                     Tamir.SharpSsh.java.util.Vector vvv = m_sftp.ls(remotePath);172                     ArrayList objList = new ArrayList();173                     foreach (Tamir.SharpSsh.jsch.ChannelSftp.LsEntry qqq in vvv)174                     {175                         string sss = qqq.getFilename();176                         if (sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length))177                         { objList.Add(sss); }178                         else { continue; }179                     }180 181                     return objList;182                 }183             }184             catch185             {186                 return null;187             }188             return null;189         }190 191     }192 193 194     //登录验证信息         195     public class MyUserInfo : UserInfo196     {197         String passwd;198 199         public String getPassword() { return passwd; }200         public void setPassword(String passwd) { this.passwd = passwd; }201 202         public String getPassphrase() { return null; }203         public bool promptPassphrase(String message) { return true; }204 205         public bool promptPassword(String message) { return true; }206         public bool promptYesNo(String message) { return true; }207         public void showMessage(String message) { }208 209     }
View Code

       

       测试----使用winform

 

   
1  ///  2         /// 下载文件 3         ///  4         ///  5         ///  6         private void button3_Click(object sender, EventArgs e) 7         { 8             FolderBrowserDialog dialog = new FolderBrowserDialog(); 9             if (dialog.ShowDialog() == DialogResult.OK)10             {11                 sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");12                 sftp.Connect();13                 sftp.Get("/home/20171013103113.csv", dialog.SelectedPath);14                 sftp.Disconnect();15             }16         }17 18         /// 19         /// 上传测试20         /// 21         /// 22         /// 23         private void button2_Click(object sender, EventArgs e)24         {25             OpenFileDialog dialog = new OpenFileDialog();26             dialog.Filter = "|*.csv";27             if (dialog.ShowDialog() == DialogResult.OK)28             {29                 sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");30                 sftp.Connect();31                 sftp.Put(dialog.FileName, "/home/");32                 sftp.Disconnect();33             }34             35         }36 37         /// 38         /// 删除测试39         /// 40         /// 41         /// 42         private void button4_Click(object sender, EventArgs e)43         {44             sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");45             sftp.Connect();46             sftp.Delete("/home/20171013103113.csv");47             sftp.Disconnect();48         }49 50         /// 51         /// 移动测试52         /// 53         /// 54         /// 55         private void button5_Click(object sender, EventArgs e)56         {57             sftpHelper sftp = new sftpHelper("192.168.2.133", "22", "admin", "Admin123");58             sftp.Connect();59             sftp.Move("/home/20171013103113.csv", "/home/temp/20171013103113.csv");60             sftp.Disconnect();61         }
View Code

 

      

 

转载于:https://www.cnblogs.com/xihao/p/7746068.html

你可能感兴趣的文章