[VB2010]如何使用URL(網址)下載檔案?
現在網際網路十分發達,一個程式往往需要結合網路功能,可能會需要連上網路來檢查程式更新,也有可能需要從網路上下載某些檔案。那麼要如何用VB下載網路上的檔案呢?用內建的WebClient類別就可以達成了。
使用WebClient下載檔案
要使用WebClient來下載檔案,必須先產生一個WebClient實體,且要帶有事件(Event),才可以及時得知下載狀況。我們要宣告一個WebClient的全域變數,宣告式如下:
Dim WithEvents Client As New Net.WebClient() |
WebClient提供了DownloadFile和DownloadFileAsync方法讓使用者呼叫,只要傳入URL和儲存路徑,就可以進行下載。前者會鎖定執行緒,也就是當下載進行的時候程式會無法進行其它工作;後者不會鎖定執行緒,程式可以一邊下載一邊做其它的事。DownloadFileAsync的呼叫方法如下:
Client.DownloadFileAsync(New Uri("網址輸入在此"), "儲存路徑輸入在此") |
如果要中斷下載,可以呼叫CancelAsync方法。呼叫方法如下:
Client.CancelAsync() |
如果要取得目前的下載狀態,例如已下載的檔案大小或是進度百分比,需使用DownloadProgressChanged事件。當WebClient的進度改變時,就會觸發這個事件。使用方式如下:
Private Sub Client_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles Client.DownloadProgressChanged '當Client正在下載時 'e.BytesReceived 取得已下載的檔案大小 'e.TotalBytesToReceive 取得總共要下載的檔案大小 'e.ProgressPercentage 取得目前的下載進度百分比(整數) End Sub |
當WebClient的下載進度完成時,會觸發DownloadFileCompleted事件。這時使用者要自行寫程式判斷下載結果是成功還是失敗。使用方式如下:
Private Sub Client_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles Client.DownloadFileCompleted '當Clien結束下載 'e.Cancelled 判斷是否為中斷(取消)下載 'e.Error '判斷下載過程是否因發生錯誤而停止下載 End Sub |
使用WebClient來下載檔案還是會有諸多不便之處,因此我就寫了一個以WebClient和System.Windows.Forms為基礎的「Downloader」類別,專門用來下載檔案。程式碼如下,需要的人自行取用,可以依用途自行修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 |
Public Class Downloader '下載器 '全域物件 Private WithEvents Client As New Net.WebClient() '宣告Client為WebClient物件,且帶有「事件」。 Private TimerProgress As New Timer '宣告TimerProgress為Timer實體 '字串常數 Private Const DEFAULT_NONE_NAMED_NAME As String = "未命名-it-easy.tw" '預設檔名 '字串變數 Private _TargetURL As String '儲存下載的目標網址 Private _SaveFolderPath As String '儲存檔案存放的資料夾路徑 Private _SaveFileName As String '儲存檔案存放的檔名 '字串不必變數 Private DATE_DAY As String = " 天 " '天 Private DATE_HOUR As String = " 小時 " '小時 Private DATE_MINUTE As String = " 分鐘 " '分 Private DATE_SECOND As String = " 秒" '秒 Private DATE_LINK As String = "又 " '又 '全域變數 Private StartTime As Long '儲存開始下載的時間 Private EndTime As Long '儲存結束下載的時間 Private BufferTime As Long '暫存下載的時間 Private BufferTimeBytes As Long '暫存下載的位元組數 '全域旗標 Private Status As Short = -2 '儲存下載狀態。如果傳回-2,代表尚未開始下載。傳回-1,代表下載正在進行中。傳回0,代表下載失敗。傳回1,代表下載成功。傳回2,代表中斷下載。 '全域下載資訊 Private BytesReceived As Long '儲存已下載的檔案大小 Private TotalBytesToReceive As Long '儲存總共要下載的檔案大小 Private ProgressPercentage As Integer '儲存目前的下載進度百分比(整數) Private BytesEverySecond As Long '儲存一秒內所傳的位元組數 '-------------------------------------------------------------------建構子------------------------------------------------------------------- Public Sub New(ByVal InputTargetURL As String) 'Downloader建構子(多載一)。引數為InputTargetURL,載入下載的目標網址。 Me.TargetURL = InputTargetURL '設定網址 Call CreatSaveFileName() '簡單設定網址中提供的檔名 Me.SaveFolderPath = Me.GetMyFolderPath() '預設檔案存放的資料夾路徑為程式本身的資料夾路徑 End Sub Public Sub New(ByVal InputTargetURL As String, ByVal InputSaveFolderPath As String) 'Downloader建構子(多載二)。引數為InputTargetURL和InputTargetURL,載入下載的目標網址和檔案存放的資料夾路徑。 Me.TargetURL = InputTargetURL '設定網址 Me.SaveFolderPath = InputSaveFolderPath '設定路徑 Call CreatSaveFileName() '簡單設定網址中提供的檔名 End Sub Public Sub New(ByVal InputTargetURL As String, ByVal InputSaveFolderPath As String, ByVal InputSaveFileName As String) 'Downloader建構子(多載三)。引數為InputTargetURL、InputTargetURL和SaveFileName,載入下載的目標網址和檔案存放的資料夾路徑,還有檔案存放的名稱。 Me.TargetURL = InputTargetURL '設定網址 Me.SaveFolderPath = InputSaveFolderPath '設定路徑 Me.SaveFileName = InputSaveFileName '設定檔名 End Sub '-------------------------------------------------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------物件屬性----------------------------------------------------------------- Public Property TargetURL() As String '取得或設定下載的目標網址 Set(ByVal InputTargetURL As String) If Status <> -1 Then '若不為下載狀態 _TargetURL = InputTargetURL '設定網址 End If End Set Get Return _TargetURL '取得網址 End Get End Property Public Property SaveFileName() As String '取得或設定檔案存放的檔名 Set(ByVal InputSaveFileName As String) If Status <> -1 Then '若不為下載狀態 '先檢查不合法字元,若遇到不合法字元自動刪除之 Dim IllegalChar() As String = {"/", "", ":", "*", "?", """", "|", "<", ">"} For Each CheckChars As String In IllegalChar InputSaveFileName = Strings.Replace(InputSaveFileName, CheckChars, "") '將不合法字元取代為空字串 Next If InputSaveFileName = "" Then '若根本沒輸入檔名 InputSaveFileName = DEFAULT_NONE_NAMED_NAME '檔名為預設名稱 End If _SaveFileName = InputSaveFileName '設定檔名 End If End Set Get Return _SaveFileName '取得檔名 End Get End Property Public Property SaveFolderPath() As String '取得或設定檔案存放的資料夾路徑 Set(ByVal InputSaveFolderPath As String) If Status <> -1 Then '若不為下載狀態 InputSaveFolderPath = CorrectFolderPath(InputSaveFolderPath) '更正路徑 If IO.Directory.Exists(InputSaveFolderPath) Then '若資料夾路徑存在 _SaveFolderPath = InputSaveFolderPath '設定存放的資料夾路徑 Else '若資料夾路徑不存在 _SaveFolderPath = Me.GetMyFolderPath End If End If End Set Get Return _SaveFolderPath '取得存放的資料夾路徑 End Get End Property Public Property SaveFullPath() As String '取得或設定檔案存放的完整路徑 Set(ByVal InputSaveFullPath As String) If Status <> -1 Then '若不為下載狀態 Dim DividePath() As String = Strings.Split(InputSaveFullPath, "") '分割路徑 If DividePath.Count > 0 Then '若有一個以上的反斜線 Dim FolderPathBuffer As String = Strings.Replace(InputSaveFullPath, DividePath(DividePath.Count - 1), "") '將檔名取代為空字串 Me.SaveFolderPath = FolderPathBuffer Me.SaveFileName = DividePath(DividePath.Count - 1) Else '格式有誤 Me.SaveFolderPath = Me.GetMyFolderPath '資料夾路徑為程式自身路徑 Me.SaveFileName = DEFAULT_NONE_NAMED_NAME '檔名為預設名稱 End If End If End Set Get Return Me.SaveFolderPath & Me.SaveFileName '傳回檔案存放的完整路徑 End Get End Property '-------------------------------------------------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------------------------------------------------- '---------------------------------------------------------------------函式------------------------------------------------------------------- Public Function CheckDownloading() As Boolean '檢查是否正在下載中 If Status = -1 Then '若正在下載 Return True '傳回True布林值 Else Return False '傳回False布林值 End If End Function Public Function GetStatus() As Short '檢查下載器的狀態 Return Status '傳回短整數 End Function Public Function ChoseFolderPath() As String '開啟FolderBrowserDialog,讓使用者選取資料夾 Dim FBD As New FolderBrowserDialog FBD.ShowDialog() '顯示資料夾選取視窗方塊 Dim FolderPath As String = FBD.SelectedPath '取得選取路徑 If FolderPath = "" Then '如果沒有選擇路徑 FolderPath = Me.GetMyFolderPath() '等於自身路徑 End If Return Me.CorrectFolderPath(FolderPath) End Function Public Function ChoseFullPath() As String '開啟SaveFileDialog,讓使用者選取檔案存放路徑 Dim SFD As New SaveFileDialog SFD.FileName = Me.SaveFileName '暫時預設檔名在文字方塊內 SFD.ShowDialog() '顯示檔案儲存路徑方塊 Dim FullPath As String = SFD.FileName '取得選取路徑 If FullPath = "" Then '如果沒有選擇路徑 FullPath = Me.GetMyFolderPath() & DEFAULT_NONE_NAMED_NAME '等於自身路徑加上預設檔名 ElseIf FullPath = Me.SaveFileName Then '若按下取消 FullPath = Me.SaveFolderPath & Me.SaveFileName '不改變 End If Return FullPath End Function Public Function GetMyFolderPath() As String '取得程式本身所在的資料夾路徑(不包括檔名) Return CorrectFolderPath(Application.StartupPath) '傳回程式本身的資料夾路徑 End Function Public Function GetBytesReceived() As Long '取得已下載的檔案大小 If Math.Abs(Status) = 1 Then '如果正在下載或是下載完成 Return BytesReceived Else Return 0 End If End Function Public Function GetTotalBytesToReceive() As Long '取得總共要下載的檔案大小 If Math.Abs(Status) = 1 Then '如果正在下載或是下載完成 Return TotalBytesToReceive Else Return 0 End If End Function Public Function GetProgressPercentage() As Integer '取得目前的下載進度百分比(整數) If Math.Abs(Status) = 1 Then '如果正在下載或是下載完成 Return ProgressPercentage Else Return 0 End If End Function Public Function GetDoubleProgressPercentage(ByVal DecimalCount As Integer) As Double '取得目前的下載進度百分比(浮點數),傳入小數位數 If Math.Abs(Status) = 1 Then '如果正在下載或是下載完成 Return Math.Round((Me.GetBytesReceived / Me.GetTotalBytesToReceive) * 100, DecimalCount) Else Return 0 End If End Function Public Function GetEverySecondSpead() As Long '取得每秒所傳送的位元組數 If Status = -1 Then '如果正在下載 Return BytesEverySecond Else Return 0 End If End Function Public Function GetLastBytes() As Long '取得剩餘的位元組數 If Status = -1 Then '如果正在下載 Return Me.GetTotalBytesToReceive - Me.GetBytesReceived Else Return 0 End If End Function Public Function FormatBytes(ByVal InputBytes As Long, ByVal DecimalCount As Integer) As String '格式化顯示(多載一)。只傳入要格式化的位元組數字和小數位數。算是一種自動化設定。 '從TB開始判斷到B Dim Unit As String '單位 If InputBytes > Math.Pow(2, 40) Then '若大於1TB,則以TB顯示 Unit = "TB" ElseIf InputBytes > Math.Pow(2, 30) Then '若大於1GB,則以GB顯示 Unit = "GB" ElseIf InputBytes > Math.Pow(2, 20) Then '若大於1MB,則以MB顯示 Unit = "MB" ElseIf InputBytes > Math.Pow(2, 10) Then '若大於1KB,則以KB顯示 Unit = "KB" ElseIf InputBytes >= 0 Then '若大於0B,則以B顯示 Unit = "Bytes" Else Unit = " -Error-" End If Return TransformBytes(InputBytes, DecimalCount, Unit) & " " & Unit End Function Public Function FormatBytes(ByVal InputBytes As Long, ByVal DecimalCount As Integer, ByVal FormatUnit As String) As String '格式化顯示(多載二)。傳入要格式化的位元組數字、小數位數和固定單位。 Return TransformBytes(InputBytes, DecimalCount, FormatUnit) & " " & FormatUnit End Function Public Function TransformBytes(ByVal InputBytes As Long, ByVal DecimalCount As Integer, ByVal FormatUnit As String) As Double '轉換Bytes大小格式。 FormatUnit = Strings.UCase(FormatUnit) '轉成大寫來判斷 If Strings.Right(FormatUnit, 1) <> "B" Then '若結尾不是B FormatUnit = FormatUnit & "B" '加B End If Dim Divisor As Long '除數 Select Case FormatUnit '選擇判斷 Case "TB" Divisor = Math.Pow(2, 40) Case "GB" Divisor = Math.Pow(2, 30) Case "MB" Divisor = Math.Pow(2, 20) Case "KB" Divisor = Math.Pow(2, 10) Case "B", "BYTEB", "BYTESB", "位元組B", "個位元組B" Divisor = 1 Case Else Return 0 End Select Return Math.Round(InputBytes / Divisor, DecimalCount) '傳回運算值 End Function Public Function GetDownloadingTime() As Long '取得下載的已用時間 If Status = -1 Then '如果正在下載 Return Environment.TickCount - StartTime '傳回目前時間減掉開始時間 Else Return 0 End If End Function Public Function GetDownloadedTime() As Long '取得整個下載進度的所用時間 If Status = 1 Then '如果成功下載 Return EndTime - StartTime '傳回結束時間減掉開始時間 Else Return 0 End If End Function Public Function GetLastTime() As Long '取得預估的剩餘時間 If Status = -1 Then '如果正在下載 Return (Me.GetLastBytes Me.GetEverySecondSpead) * 1000 '轉成毫秒 Else Return 0 End If End Function Public Function FormatTime(ByVal TimeGap As Long) As String '轉換時間格式 Dim iDay As Integer, iHour As Integer, iMinute As Integer, iSecond As Integer TimeGap = TimeGap / 1000 '毫秒轉換成秒 '天 While TimeGap >= 86400 iDay += 1 TimeGap -= 86400 End While '時 While TimeGap >= 3600 iHour += 1 TimeGap -= 3600 End While '分 While TimeGap >= 60 iMinute += 1 TimeGap -= 60 End While '秒 iSecond = TimeGap If iDay > 0 Then Return iDay & DATE_DAY & DATE_LINK & iHour & DATE_HOUR & iMinute & DATE_MINUTE & iSecond & DATE_SECOND ElseIf iHour > 0 Then Return iHour & DATE_HOUR & DATE_LINK & iMinute & DATE_MINUTE & iSecond & DATE_SECOND ElseIf iMinute > 0 Then Return iMinute & DATE_MINUTE & DATE_LINK & iSecond & DATE_SECOND ElseIf iSecond >= 0 Then Return iSecond & DATE_SECOND Else Return "" End If End Function Public Function CreateFolder(ByVal FolderPath As String) As Boolean '建立資料夾 If IO.Directory.Exists(FolderPath) = False Then '若資料夾路徑不存在 On Error Resume Next '如果遇到錯誤繼續執行 IO.Directory.CreateDirectory(FolderPath) '建立資料夾 End If Return IO.Directory.Exists(FolderPath) '建立完後若資料夾存在則傳回True;否則傳回False End Function Private Function CorrectFolderPath(ByVal InputFolderPath As String) As String '更正資料夾路徑格式 If Strings.Right(InputFolderPath, 1) <> "" Then '判斷最後一個字元是否為"",若不是,則添加上去 InputFolderPath = InputFolderPath & "" End If Return InputFolderPath End Function '-------------------------------------------------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------------------------------------------------- '--------------------------------------------------------------------副程式------------------------------------------------------------------ Public Sub StartDownload() '開始進行下載程序 On Error Resume Next '如果遇到錯誤繼續執行 If Me.CheckDownloading = False Then '若目前沒有正在下載 If IO.File.Exists(Me.SaveFullPath) Then IO.File.Delete(Me.SaveFullPath) '如果儲存路徑有殘留的檔案存在,刪除它 Client.DownloadFileAsync(New Uri(TargetURL), Me.SaveFullPath) '開始下載,且不封鎖呼叫執行緒 Status = -1 '正在下載 StartTime = Environment.TickCount '儲存開始下載的時間點 Debug.Print("正在從「{0}」取得資料...", Me.TargetURL) End If End Sub Public Sub StopDownloading() '停止下載程序 If Status = -1 Then '如果目前是正在下載的狀態 Status = 2 Client.CancelAsync() '中斷下載 Debug.Print("終止下載!") End If End Sub Private Sub TimerGate() '內部使用的Timer控制閘 TimerProgress.Enabled = Me.CheckDownloading '開關Timer End Sub Public Sub TimerGate(ByRef TimerControl As Timer) 'Timer控制閘(多載一),只傳入一個Timer物件實體 TimerProgress = TimerControl '將TimerProgress參考到TimerControl End Sub Public Sub TimerGate(ByRef TimerControl As Timer, ByVal Interval As Long) 'Timer控制閘(多載二),傳入一個Timer物件實體和時間 TimerProgress = TimerControl '將TimerProgress參考到TimerControl TimerProgress.Interval = Interval '設定時間 End Sub Private Sub CreatSaveFileName() '簡單設定網址中提供的檔名 Dim DivideURL() As String = Strings.Split(Me.TargetURL, "/") If Strings.InStrRev(DivideURL(DivideURL.Count - 1), ".") > 0 Then '網址最後一段的字串中倒數搜尋是否有副檔名專用的「.」,若有則作為檔名。 Me.SaveFileName = DivideURL(DivideURL.Count - 1) Else '若沒有則用預設名稱 Me.SaveFileName = DEFAULT_NONE_NAMED_NAME End If End Sub Private Sub Client_DownloadProgressChanged(ByVal sender As Object, ByVal e As System.Net.DownloadProgressChangedEventArgs) Handles Client.DownloadProgressChanged '當Client正在下載時 Call TimerGate() '內部使用的Timer控制閘 '時間 If Environment.TickCount - BufferTime > 1000 Then '若時間超過一秒 BytesEverySecond = e.BytesReceived - BufferTimeBytes BufferTime = Environment.TickCount '等於目前時間 BufferTimeBytes = e.BytesReceived '等於目前所傳的數 End If BytesReceived = e.BytesReceived '儲存已下載的檔案大小 TotalBytesToReceive = e.TotalBytesToReceive '儲存總共要下載的檔案大小 ProgressPercentage = e.ProgressPercentage '儲存目前的下載進度百分比(整數) Debug.Print("已收到/總共:{0}/{1} 完成進度:{2}% 已使用:{3} 速度:{4}/s", Me.FormatBytes(Me.GetBytesReceived, 2), Me.FormatBytes(Me.GetTotalBytesToReceive, 2), Me.GetDoubleProgressPercentage(2), Me.FormatTime(Me.GetDownloadingTime), Me.FormatBytes(Me.GetEverySecondSpead, 2)) End Sub Private Sub Client_DownloadFileCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles Client.DownloadFileCompleted '當Clien結束下載 On Error Resume Next '如果遇到錯誤繼續執行 If Status = -1 Then If IO.File.Exists(Me.SaveFullPath) AndAlso My.Computer.FileSystem.GetFileInfo(SaveFullPath).Length > 0 AndAlso My.Computer.FileSystem.GetFileInfo(SaveFullPath).Length = Me.GetTotalBytesToReceive Then '若檔案存在,且大小都和網路上的相同。表示下載成功 Status = 1 '下載成功 EndTime = Environment.TickCount '儲存結束時間 Debug.Print("下載成功!") Else Status = 0 '下載失敗 Debug.Print("下載失敗!") End If End If If Status <> 1 Then '若下載不成功 If IO.File.Exists(Me.SaveFullPath) Then IO.File.Delete(Me.SaveFullPath) '如果有殘留的檔案存在,刪除它 End If Call TimerGate() '內部使用的Timer控制閘 End Sub Public Sub SetTimeFormat(ByVal DayString As String, ByVal HourString As String, ByVal MinuteString As String, ByVal SecondString As String) '設定時間格式 DATE_DAY = DayString DATE_HOUR = HourString DATE_MINUTE = MinuteString DATE_SECOND = SecondString End Sub '-------------------------------------------------------------------------------------------------------------------------------------------- '-------------------------------------------------------------------------------------------------------------------------------------------- End Class |
Downloader類別各項屬性方法名稱說明
屬性(Property)名稱 | 型態 | 功能說明 |
SaveFileName | String(字串) | 取得或設定檔案存放的檔名。 |
SaveFolderPath | String(字串) | 取得或設定檔案存放的資料夾路徑(無法自動建立資料夾)。若指定值有誤,會自動以程式自身路徑做設定。 |
SaveFullPath | String(字串) | 取得或設定檔案存放的完整路徑(無法自動建立資料夾)。若指定值有誤,會自動以程式自身路徑和預設檔名做設定。 |
TargetURL | String(字串) | 取得或設定下載的目標網址。 |
函式(Function)名稱 | 回傳型態 | 功能說明 |
CheckDownloading | Boolean(布林) | 檢查是否正在下載中。如果正在下載,傳回True;否則傳回False。用來進行下載作業判斷。 |
ChoseFolderPath | String(字串) | 開啟FolderBrowserDialog,讓使用者選取資料夾。通常和SaveFolderPath合用。 |
ChoseFullPath | String(字串) | 開啟SaveFileDialog,讓使用者選取檔案存放路徑。通常和SaveFullPath合用。 |
CreateFolder | Boolean(布林) | 傳入資料夾路徑,如果路徑不存在就自動建立資料夾。若有建立成功則傳回True;失敗則傳回False。 |
FormatBytes | String(字串) | 傳入要格式化的位元組數字和小數位數,傳回以TB、GB、MB、KB、B為單位的字串。若在第三個引數有指定單位(String型態),則以指定的單位進行字串格式化。 |
FormatTime | String(字串) | 傳入毫秒數,轉換時間為字串格式。 |
GetBytesReceived | Long(長整數) | 取得已下載的檔案大小(單位:位元組Byte)。 |
GetDoubleProgressPercentage | Double(倍精準浮點數) | 取得目前的下載進度百分比(浮點數),傳入小數位數。 |
GetDownloadedTime | Long(長整數) | 取得從開始下載到下載完成的所用時間。 |
GetDownloadingTime | Long(長整數) | 取得下載的已用時間。 |
GetEverySecondSpead | Long(長整數) | 取得每秒所傳送的位元組數。 |
GetLastBytes | Long(長整數) | 取得剩餘的位元組數。 |
GetLastTime | Long(長整數) | 取得預估的剩餘時間。 |
GetMyFolderPath | String(字串) | 取得程式本身所在的資料夾路徑(不包括檔名)。 |
GetProgressPercentage | Integer(整數) | 取得目前的下載進度百分比(整數)。 |
GetStatus | Short(短整數) | 傳回下載器的狀態。如果傳回-2,代表尚未開始下載;傳回-1,代表下載正在進行中;傳回0,代表下載失敗。傳回1;代表下載成功。傳回2,代表中斷下載。可用Select Case來擷取數值。 |
GetTotalBytesToReceive | Long(長整數) | 取得總共要下載的檔案大小(單位:位元組Byte)。 |
TransformBytes | Double(倍精準浮點數) | 傳入要格式化的位元組數字、小數位數和指定單位,轉換位元組Byte為浮點數格式。 |
副程式(Sub)名稱 | 功能說明 |
TimerGate | Timer控制閘。傳入一個Timer實體,用來觸發事件。第二個引數可以設定此Timer的Interval屬性。 |
StartDownload | 一切就緒後,呼叫此Sub可以開始進行下載程序。 |
StopDownloading | 停止下載程序。 |
SetTimeFormat | 設定時間格式。傳入「天、小時、分鐘、秒」的顯示字串。 |