WPF使用WinSCP實(shí)現(xiàn)FTP下載
WPF 使用 WinSCP 做 FTP 下載
Nuget
安裝 WinSCP
當(dāng)安裝完成后進(jìn)入安裝后的目錄 packages\WinSCP.5.21.6\tools
將兩個(gè)文件拷貝 Debug
調(diào)試(運(yùn)行)目錄下。
下面開(kāi)始代碼實(shí)現(xiàn)使用 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?=?"文件已經(jīng)全部下載完成"; ????????????????else ????????????????????myTextBlock.Text?=?$"正在下載文件?{System.IO.Path.GetFileName(e.FileName)}"; ????????????})); ????????} ????} }
效果圖
下載完成的文件
到此這篇關(guān)于WPF使用WinSCP實(shí)現(xiàn)FTP下載的文章就介紹到這了,更多相關(guān)WPF WinSCP實(shí)現(xiàn)FTP下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#通過(guò)WIN32 API實(shí)現(xiàn)嵌入程序窗體
這篇文章主要介紹了C#通過(guò)WIN32 API實(shí)現(xiàn)嵌入程序窗體的方法,涉及WIN32 API的調(diào)用及窗體的設(shè)計(jì),具有很好的借鑒價(jià)值,需要的朋友可以參考下2014-09-09深入講解C#編程中嵌套類(lèi)型和匿名類(lèi)型的定義與使用
這篇文章主要介紹了C#編程中嵌套類(lèi)型和匿名類(lèi)型的定義與使用,包括在SQL語(yǔ)句中使用匿名類(lèi)型的方法,需要的朋友可以參考下2016-01-01原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法(Unity3D可用)
Lua是一種很好的擴(kuò)展性語(yǔ)言,Lua解釋器被設(shè)計(jì)成一個(gè)很容易嵌入到宿主程序的庫(kù),下面這篇文章主要給大家介紹了關(guān)于原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法,Unity3D可用的相關(guān)資料,需要的朋友可以參考下2022-04-04Unity實(shí)現(xiàn)角色受擊身體邊緣發(fā)光特效
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)角色受擊身體邊緣發(fā)光特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C# 抽象類(lèi),抽象屬性,抽象方法(實(shí)例講解)
下面小編就為大家分享一篇C# 抽象類(lèi),抽象屬性,抽象方法的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12