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);
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不写版本的都是耍流氓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值