WPF使用WinSCP实现FTP下载

 更新时间:2023年01月04日 10:12:28   作者:驚鏵  
这篇文章主要为大家详细介绍了WPF如何使用WinSCP实现FTP下载,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下

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下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现串口通信详解

    C#实现串口通信详解

    串口通信(Serial Communications)是指外设和计算机间通过数据信号线、地线等按位(bit)进行传输数据的一种通信方式,属于串行通信方式,能够实现远距离通信,本文给大家介绍了C#串口通信总结,需要的朋友可以参考下
    2024-12-12
  • 新手学习.net的一列好走的路径及方法

    新手学习.net的一列好走的路径及方法

    新手学习.net的一列好走的路径及方法,想学习.net的朋友可以参考下。
    2011-11-11
  • C#实现目录跳转(TreeView和SplitContainer)的示例代码

    C#实现目录跳转(TreeView和SplitContainer)的示例代码

    本文主要介绍了C#实现目录跳转(TreeView和SplitContainer)的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C#实现上位机的远程监控与控制的详细步骤

    C#实现上位机的远程监控与控制的详细步骤

    随着工业自动化、物联网以及智能控制系统的普及,远程监控与控制逐渐成为了许多系统的核心需求,上位机作为控制与监测系统的核心,常用于接收处理来自下位机的数据并进行控制操作,C#作为一门高效且功能强大的编程语言,本文将探讨如何使用C#实现上位机远程监控与控制
    2025-01-01
  • C#调用EXE文件实现传参和获取返回结果

    C#调用EXE文件实现传参和获取返回结果

    本文主要介绍了C#调用EXE文件实现传参和获取返回结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • unity实现多点触控代码

    unity实现多点触控代码

    这篇文章主要介绍了unity实现多点触控代码,我最近在学习Unity游戏引擎。先从Unity平面开始,本章介绍Unity 平面上的多点触摸。有需要的小伙伴参考下。
    2015-03-03
  • Unity多语言转换工具的实现

    Unity多语言转换工具的实现

    这篇文章主要为大家详细介绍了Unity多语言转换工具的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 使用C#实现MD5加密的方法详解

    使用C#实现MD5加密的方法详解

    在软件开发中,加密是保护数据安全的重要手段之一,MD5(Message Digest Algorithm 5)是一种常用的哈希算法,用于生成数据的摘要或哈希值,本文介绍了如何使用C#语言实现MD5加密的方法,涵盖了基本的使用方式和扩展方法封装,需要的朋友可以参考下
    2024-08-08
  • 关于c#中单例模式的一些问题

    关于c#中单例模式的一些问题

    这篇文章主要给大家介绍了关于c#中单例模式的一些问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • c#实现字符串反序输出字符串的实例

    c#实现字符串反序输出字符串的实例

    下面小编就为大家分享一篇c#实现字符串反序输出字符串的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12

最新评论