当前位置: 首页 > article >正文

c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能

网上写c#调用winscp实现的资料很少,且写的不够详细。本人查了下winscp的libraries说明,写了个小工具,供大家参考。

winscp的接口说明地址如下:

WinSCP .NET Assembly and COM Library :: WinSCP

一、先展示一下小工具的界面

1、支持SFTP/FTP/SCP

2、支持文件夹、文件的上传和下载

二、源码地址

源码地址如下:

https://download.csdn.net/download/qq_39385706/89808931

三、代码关键部分

1、配置会话选项

// 配置会话选项
            sessionOptions = new SessionOptions
            {
               // Protocol = Protocol.Scp,
                HostName = textBox1.Text,
                UserName = textBox2.Text,
                Password = textBox3.Text,
                PortNumber =Convert.ToInt32( textBox4.Text),
                 //SshHostKeyFingerprint = "ssh-rsa 1024 ll0iqW5PjitSqcb1JuI3pHXOhehkMmHLcKRg1Ijm0JY=",
               // SshHostKeyFingerprint = "ssh-rsa 1024 ZoU0fHT9xO+4QMxSYJlpebu5xgHPilV3wuAk0diF1AQ=",

            };
            switch (comboBox3.Text)
            {
                case "Sftp":
                    sessionOptions.Protocol = Protocol.Sftp;
                   
                    break;
                case "Scp":
                    sessionOptions.Protocol = Protocol.Scp;
                   
                    break;
                case "Ftp":
                    sessionOptions.Protocol = Protocol.Ftp;
                    break;
                default:
                    break;
            }
            if (comboBox3.Text.Equals("Sftp") || comboBox3.Text.Equals("Scp"))
            {
                    sessionOptions.AddRawSettings("KEX", "dh-group1-sha1,ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN");
            }

2、获取目录列表

using (session = new WinSCP.Session())
            {
                try
                {
                    if (Protocol.Equals("Sftp") || Protocol.Equals("Scp"))
                    {
                            //sessionOptions.AddRawSettings("KEX", "dh-group1-sha1,ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN");
                            string SshHostKeyFingerprint1 = session.ScanFingerprint(sessionOptions, "SHA-256");
                            LogHelper.WriteLog("SshHostKeyFingerprint====" + SshHostKeyFingerprint1);
                            sessionOptions.SshHostKeyFingerprint = SshHostKeyFingerprint1;
                    }
                    // 连接
                    session.Open(sessionOptions);
                    // Upload files
                    transferOptions.TransferMode = TransferMode.Binary;
                    //获取所有目录
                    remoteDirectoryInfo = session.ListDirectory(remotePath);
                    // remoteDirectoryInfo = session.ListDirectory(".");
                    int fileCount = remoteDirectoryInfo.Files.Count;
                    Console.WriteLine(fileCount);
                    listView2Show(fileCount);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

3、上传文件或文件夹

 try
            {
                using (session = new WinSCP.Session())
                {
                    // 连接
                    session.Open(sessionOptions);
                    // Upload files
                    transferOptions.TransferMode = TransferMode.Binary;
                    string localPath = comboBox1.Text + listView1.SelectedItems[0].Text;
                    string remoptejPath = comboBox2.Text;
                   
                    transferResult = session.PutFiles(localPath, remoptejPath, false, transferOptions);
                    // Throw on any error
                    transferResult.Check();
                    // Print results
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        Console.WriteLine("Download of {0} succeeded", transfer.FileName);
                    }

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

4、下载文件或者文件夹

  try
            {
                using (session = new WinSCP.Session())
                {
                    // 连接
                    session.Open(sessionOptions);

                    // Upload files

                    transferOptions.TransferMode = TransferMode.Binary;


                    string srcPath = comboBox2.Text + listView2.SelectedItems[0].Text;
                    string objPath = comboBox1.Text;
                    transferResult = session.GetFiles(srcPath, objPath, false, null);
                    // Throw on any error
                    transferResult.Check();

                    // Print results
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        Console.WriteLine("Download of {0} succeeded", transfer.FileName);
                    }
                    listView1Show(comboBox1.Text);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }


http://www.kler.cn/news/330023.html

相关文章:

  • 大数据比懂知识点:Parquet、ORC还是Avro作为数据存储格式,哪种在性能和压缩率上更优
  • 【C++二分查找 前缀和】1712. 将数组分成三个子数组的方案数|2078
  • 深入解析开源大模型的GPU资源需求与优化策略
  • 程序员如何通过专业与软技能提升核心竞争力
  • 特权访问管理阻力最小的途径
  • 付费计量系统通用功能(9)
  • 企望制造ERP系统存在RCE漏洞
  • UniVue大版本更新:UniVue2.0.0-preview
  • 10月2日笔记(内网资源探测篇)
  • 前端的全栈混合之路Meteor篇:运行在浏览器端的数据库-MiniMongo介绍及其前后端数据实时同步示例
  • 矩阵系统源码搭建,OEM贴牌,源头技术开发
  • 前端的全栈混合之路Meteor篇:3.0新版本介绍
  • vscode使用yarn 启动vue项目记录
  • 一个好用的服务治理组件Sentinel
  • 利士策分享,行走•悟世•惜福: 旅行真谛
  • nginx常用的性能优化
  • Custom C++ and CUDA Extensions - PyTorch
  • 外部引入的 JavaScript 放置位置
  • SpringBoot 源码解读与自动装配原理结合Actuator讲解
  • 汽车发动机系统(ems)详细解析
  • 01.useStateWithLabel
  • Mybatis-Flex使用
  • MybatisPlus代码生成器的使用
  • linux kernel Gdb在线调试
  • 【论文笔记】Visual Instruction Tuning
  • 操作系统_名词_文件下载_反弹SHELL_防火墙绕过
  • Junit和枚举ENUM
  • CentOS 6文件系统
  • 低功耗4G模组Air780E之串口通信篇
  • Kotlin:2.0.0 的新特性