服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - WPF使用WinSCP实现FTP下载

WPF使用WinSCP实现FTP下载

2023-02-28 13:29驚鏵 C#

这篇文章主要为大家详细介绍了WPF如何使用WinSCP实现FTP下载,文中的示例代码讲解详细,对我们学习或工作有一定帮助,感兴趣的小伙伴可以了解一下

WPF 使用 WinSCP 做 FTP 下载

Nuget 安装 WinSCP

WPF使用WinSCP实现FTP下载

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

WPF使用WinSCP实现FTP下载

WPF使用WinSCP实现FTP下载

下面开始代码实现使用 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下载

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

原文地址:https://mp.weixin.qq.com/s/x0n87MbVFqqb0AKSSyn_uw

延伸 · 阅读

精彩推荐
  • C#C#向word文档插入新段落及隐藏段落的方法

    C#向word文档插入新段落及隐藏段落的方法

    这篇文章主要为大家详细介绍了C#如何向word文档插入一个新段落及隐藏段落 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Yesi8652021-12-31
  • C#C#事件订阅发布实现原理详解

    C#事件订阅发布实现原理详解

    这篇文章主要介绍了C#事件订阅发布实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    David Huang6772022-10-19
  • C#C# 使用相同权限调用 cmd 传入命令的方法

    C# 使用相同权限调用 cmd 传入命令的方法

    本文告诉大家如何使用相同权限调用cmd并且传入命令,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧...

    lindexi8422022-02-25
  • C#windows中使用C# 调用 C语言生成的dll

    windows中使用C# 调用 C语言生成的dll

    本文给大家介绍的是在Windows系统中使用C#调用C语言生成的DLL文件的一种思路,非常的简单实用,有需要的小伙伴可以参考下...

    notnoly6342021-12-09
  • C#C#多线程及同步示例简析

    C#多线程及同步示例简析

    这篇文章主要为大家详细介绍了C#多线程及同步示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    YSWALLE7852022-01-20
  • C#C#托管内存与非托管内存之间的转换的实例讲解

    C#托管内存与非托管内存之间的转换的实例讲解

    在本篇文章里小编给大家整理了关于C#托管内存与非托管内存之间的转换的实例以及相关知识点,需要的朋友们学习下。...

    menjiawan9682022-08-04
  • C#Unity调用打印机打印图片

    Unity调用打印机打印图片

    这篇文章主要为大家详细介绍了Unity通过调用打印机打印图片的代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一...

    月夜风雨磊10122022-08-08
  • C#HttpWebRequest实现下载图片至本地

    HttpWebRequest实现下载图片至本地

    这篇文章主要为大家详细介绍了HttpWebRequest实现下载图片至本地,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    C#教程网9082022-02-27