文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

WPF使用WinSCP实现FTP下载

2023-01-04 12:03

关注

WPF 使用 WinSCP 做 FTP 下载

Nuget 安装 WinSCP

当安装完成后进入安装后的目录 packages\WinSCP.5.21.6\tools 将两个文件拷贝 Debug 调试(运行)目录下。

下面开始代码实现使用 WinSCP FTP 下载。

示例代码

1) xaml 代码如下:

<wpfdev:Window x:Class="WpfApp1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:wpfdev="https://github.com/WPFDevelopersOrg/WPFDevelopers"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d" WindowStyle="ToolWindow"
        Title="WinSCP - FTP" Height="450" Width="800">
    <Grid>
        <WrapPanel VerticalAlignment="Center"
                   HorizontalAlignment="Center">
            <TextBlock Name="myTextBlock" Margin="10,0" VerticalAlignment="Center"/>
            <wpfdev:CircularProgressBar Name="myCircularProgressBar" 
                                        BrushStrokeThickness="2"
                                        StrokeThickness="5"
                                        Size="20,20"
                                        BorderBrush="#42ABAC" 
                                        Background="#E14D5F"
                                        Value="0"/>
            <Button Style="{StaticResource PrimaryButton}" Margin="10,0" Content="Download" Click="Button_Click"/>
        </WrapPanel>
    </Grid>
</wpfdev:Window>

2) cs 代码如下:

using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows;
using WinSCP;

namespace WpfApp1
{
    /// <summary>
    /// Window1.xaml 的交互逻辑
    /// </summary>
    public partial class Window1
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            myCircularProgressBar.Value = 0;
            Task.Run(() =>
            {
                Download();
            });
        }
        bool Download()
        {
            try
            {
                
                SessionOptions sessionOptions = new SessionOptions
                {
                    Protocol = Protocol.Ftp,
                    HostName = "127.0.0.1",
                    UserName = "wpfdevelopers",
                    Password = "wpfdevelopers",

                };
                string localPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"packages");
                if (Directory.Exists(localPath))
                    DeleteDirectory(localPath);
                string remotePath = "packages";
                using (Session session = new Session())
                {
                    session.FileTransferProgress += Session_FileTransferProgress;
                    session.Open(sessionOptions);
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;
                    TransferOperationResult transferResult = session.GetFiles(remotePath, localPath, false, transferOptions);
                    transferResult.Check();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        void DeleteDirectory(string target_dir)
        {
            string[] files = Directory.GetFiles(target_dir);
            string[] dirs = Directory.GetDirectories(target_dir);
            foreach (string file in files)
            {
                File.SetAttributes(file, FileAttributes.Normal);
                File.Delete(file);
            }
            foreach (string dir in dirs)
            {
                DeleteDirectory(dir);
            }
            Directory.Delete(target_dir, false);
        }
        private void Session_FileTransferProgress(object sender, FileTransferProgressEventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
               
                var value = (int)(e.OverallProgress * 100);
                myCircularProgressBar.Value = value;
                if (value == 100)
                    myTextBlock.Text = "文件已经全部下载完成";
                else
                    myTextBlock.Text = $"正在下载文件 {System.IO.Path.GetFileName(e.FileName)}";
            }));

        }
    }
}

效果图

下载完成的文件

到此这篇关于WPF使用WinSCP实现FTP下载的文章就介绍到这了,更多相关WPF WinSCP实现FTP下载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯