基于VB.Net的FTP操作的类(可以显示进度条)
生活随笔
收集整理的這篇文章主要介紹了
基于VB.Net的FTP操作的类(可以显示进度条)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ?關于FTP的操作類網上很多,并且功能很齊全,本文章主要是在下載過程中添加了進度顯示,利用進度條實時的顯示下載進度。
'******************************** ' Function: FTP服務器下載有關的類 ' Author: 要點理想色彩 ' Createtime: 2018/07/23 ' Remark: '******************************* Imports System.Net Public Class FTP' 定義連接地址Private host As String' 用戶名Private username As String' 密碼Private password As String''' <summary>''' 創建帶參數的構造方法''' </summary>''' <param name="IP">連接FTP服務器的IP地址,如果FTP的默認端口被更改,則需要將端口帶上,例如:ftp://192.168.6.11:21</param>''' <param name="userName">用戶名</param>''' <param name="psd">密碼</param>''' <remarks></remarks>Private Sub New(ByVal IP As String, ByVal userName As String, ByVal psd As String)' 給類的變量賦值Me.host = IPMe.username = userNameMe.password = psdEnd Sub''' <summary>''' 下載文件;將Ftp服務器的文"remoteFile下載到本地的文件localFile''' </summary>''' <param name="localFile">本地的文件</param>''' <param name="remoteFile">Ftp服務器的文件</param>''' <remarks></remarks>Private Sub DownLoad(ByVal localFile As String, ByVal remoteFile As String)'獲取指定文件的大小Dim filesize As Long = GetFileSize(remoteFile)' 定義統一資源標識符' remarks:RUI為統一資源標識符(Uniform Resource Identifier);RUL為統一資源定位符(Uniform Resource Location)Dim RUI As StringRUI = host & remoteFile' 創建FtpWebRequest類實例. ' remarks:因為FtpWebRequest.Create(RUI)創建的是 FtpWebRequest的父類WebRequest,因此需要進行類型轉化Dim ftp As FtpWebRequestftp = CType(FtpWebRequest.Create(RUI), FtpWebRequest)' 添加通信憑證,通信憑據主要是用戶名和密碼ftp.Credentials = New NetworkCredential(username, password)' 設置傳輸方式, true,指示服務器要傳輸的是二進制數據;false,指示數據為文本。默認值為 true。' remarks: 關于傳輸方式的選取和文件類型有關,如果是文本類的就選擇文本;其他的最好選擇二進制,如果是' 壓縮文件的話,選擇文本傳輸會導致文件大小不一樣,亂碼都有可能。ftp.UseBinary = False' 定義Ftp操作的方法,操作方法有很多,例如下載,上傳,獲取詳細列表,簡單列表,文件大小ftp.Method = WebRequestMethods.Ftp.DownloadFile' 獲取響應和響應流' remarks:此時本地程序才和FTP服務器建立起通信,防止錯誤,需要用TryDim response As FtpWebResponseDim responseStream As IO.StreamTryresponse = CType(ftp.GetResponse, System.Net.FtpWebResponse)Catch ex As ExceptionMsgBox("錯誤代碼為:" & Err.Number & vbCrLf & "錯誤描述為: " & Err.Description)Exit SubEnd TryresponseStream = response.GetResponseStream' 創建本地的文件流Dim fs As New IO.FileStream(localFile, IO.FileMode.Create)' 創建字符傳輸的緩存大小Dim buffer(1024 * 1024 * 8) As ByteDim read As Integer = 0' 利用循環讀取服務器響應流里面的內容到本地' remarks利用文件的大小作為分母,可以在進度條里面實時的顯示下載進度' 定義一個進度條Dim Progressbar1 As New System.Windows.Forms.ProgressBarDo' 讀響應流read = responseStream.Read(buffer, 0, buffer.Length)' 寫到本地fs.Write(buffer, 0, read)' 給進度條賦值Progressbar1.Value = fs.Length * 100 / filesize' 刷新進度條Progressbar1.Refresh()Loop Until read = 0' 將內存里面的緩存保存到硬盤中fs.Flush()' 本地的流fs.Close()' 關閉服務器的流responseStream.Close()' 關閉服務器響應response.Close()End Sub''' <summary>''' 獲取FTP指定文件的大小''' </summary>''' <param name="remoteFile">FTp服務器的文件路徑</param>''' <returns>長整型變量:文件的大小</returns>''' <remarks>寫該函數的目的是在文件下載的時候,在字節流讀的時候,利用已經讀取的字節大小除以文件的大小,就可以獲取下載的進度</remarks>Public Function GetFileSize(ByVal remoteFile As String) As Long'定義函數返回值Dim ret As Long = 0'創建FtpWebRequest類實例Dim URI As String = host & remoteFileDim ftp As System.Net.FtpWebRequest = CType(FtpWebRequest.Create(URI), FtpWebRequest)'設置ftp方法為獲取文件的大小ftp.Method = System.Net.WebRequestMethods.Ftp.GetFileSize'設置請求完后銷毀連接ftp.KeepAlive = False'設置傳輸類型為文本ftp.UseBinary = False'獲取請求回應Dim ftpresponse As FtpWebResponseTryftpresponse = CType(ftp.GetResponse, System.Net.FtpWebResponse)Catch ex As ExceptionMsgBox("錯誤代碼為:" & Err.Number & vbCrLf & "錯誤描述為: " & Err.Description)Return retEnd Try'獲取文件長度ret = ftpresponse.ContentLength'關閉響應流ftpresponse.Close()'返回函數值Return retEnd Function End Class?
總結
以上是生活随笔為你收集整理的基于VB.Net的FTP操作的类(可以显示进度条)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac使用小技巧及grapher作图神器
- 下一篇: 学python多大年龄可以学车_多大年龄