如何用WinSCP在WPF应用程序中完成FTP文件下载操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计755个文字,预计阅读时间需要4分钟。
WPF应用中,使用WinSCP进行FTP下载Nuget包的步骤如下:
1. 安装WinSCP并配置FTP连接。
2.完成安装后,进入`C:\Program Files\WinSCP\packages\WinSCP.5.21.6\tools`目录。
3.将两个文件复制到`Debug`(调试)目录下。
4.在调试模式下运行应用程序。
以下是一个简单的代码示例,展示如何使用WinSCP进行FTP下载:
csharp
using System;using WinSCP;public class FtpDownloader{ public void DownloadFtpFiles() { // FTP服务器配置 string hostName=yourserver.com; string username=yourusername; string password=yourpassword; int port=21;
// WinSCP会话选项 SessionOptions options=new SessionOptions { HostName=hostName, PortNumber=port, Username=username, Password=password, SshHostKeyFingerprint=ssh-fingerprint };
using (Session session=new Session()) { // 连接到FTP服务器 session.Open(options);
// 要下载的文件路径 string remoteFilePath=/path/to/file.zip; string localFilePath=@C:\Local\file.zip;
// 下载文件 TransferOptions transferOptions=new TransferOptions(); transferOptions.FileTransferMode=FileTransferMode.Binary;
session.GetFiles(remoteFilePath, localFilePath, false, transferOptions).Wait();
// 关闭会话 session.Close(); }
Console.WriteLine(文件下载完成。); }}
确保替换`yourserver.com`、`yourusername`、`yourpassword`和`ssh-fingerprint`为实际的FTP服务器信息。这段代码会从FTP服务器下载指定文件到本地`Debug`目录。
WPF 使用 WinSCP 做 FTP 下载
Nuget安装WinSCP
当安装完成后进入安装后的目录packages\WinSCP.5.21.6\tools将两个文件拷贝Debug调试(运行)目录下。
下面开始代码实现使用WinSCP FTP下载。
示例代码
1)xaml代码如下:
<wpfdev:Window x:Class="WpfApp1.Window1" xmlns="schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft.com/winfx/2006/xaml" xmlns:d="schemas.microsoft.com/expression/blend/2008" xmlns:mc="schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wpfdev="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下载内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
本文共计755个文字,预计阅读时间需要4分钟。
WPF应用中,使用WinSCP进行FTP下载Nuget包的步骤如下:
1. 安装WinSCP并配置FTP连接。
2.完成安装后,进入`C:\Program Files\WinSCP\packages\WinSCP.5.21.6\tools`目录。
3.将两个文件复制到`Debug`(调试)目录下。
4.在调试模式下运行应用程序。
以下是一个简单的代码示例,展示如何使用WinSCP进行FTP下载:
csharp
using System;using WinSCP;public class FtpDownloader{ public void DownloadFtpFiles() { // FTP服务器配置 string hostName=yourserver.com; string username=yourusername; string password=yourpassword; int port=21;
// WinSCP会话选项 SessionOptions options=new SessionOptions { HostName=hostName, PortNumber=port, Username=username, Password=password, SshHostKeyFingerprint=ssh-fingerprint };
using (Session session=new Session()) { // 连接到FTP服务器 session.Open(options);
// 要下载的文件路径 string remoteFilePath=/path/to/file.zip; string localFilePath=@C:\Local\file.zip;
// 下载文件 TransferOptions transferOptions=new TransferOptions(); transferOptions.FileTransferMode=FileTransferMode.Binary;
session.GetFiles(remoteFilePath, localFilePath, false, transferOptions).Wait();
// 关闭会话 session.Close(); }
Console.WriteLine(文件下载完成。); }}
确保替换`yourserver.com`、`yourusername`、`yourpassword`和`ssh-fingerprint`为实际的FTP服务器信息。这段代码会从FTP服务器下载指定文件到本地`Debug`目录。
WPF 使用 WinSCP 做 FTP 下载
Nuget安装WinSCP
当安装完成后进入安装后的目录packages\WinSCP.5.21.6\tools将两个文件拷贝Debug调试(运行)目录下。
下面开始代码实现使用WinSCP FTP下载。
示例代码
1)xaml代码如下:
<wpfdev:Window x:Class="WpfApp1.Window1" xmlns="schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="schemas.microsoft.com/winfx/2006/xaml" xmlns:d="schemas.microsoft.com/expression/blend/2008" xmlns:mc="schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wpfdev="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下载内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

