none
請問利用VB.NET寫下載程式碼的問題 RRS feed

  • 問題

  • 不好意思,上次問過用HTTP下載的方式
    可以用DownloadFile

    可是要像一般下載軟體一樣在下載之前就得知要下載的檔案有多大
    並在下載的同時顯示下載進度
    請問這種程式應該朝什麼方向去寫呢?
    不知道有沒有具體的範例

    我利用Google搜尋,大多數都是下載vb.net的討論串
    而不是說明這類的程式大概要朝什麼方式去寫
    還有可能會用到什麼功能或程式碼

    請各位大大提供個方向吧

    2006年12月15日 下午 05:57

解答

  • 小朱:不是吐你槽,我也跟你一樣以為不行,不過剛好看到 MSDN 網站上有範例...

    程式碼網址:http://msdn.microsoft.com/msdnmag/issues/06/05/WrapItUp/default.aspx?loc=&fig=true

    主要是用啟動一個非同步的下載:

    w.DownloadFileAsync(New System.Uri(address), "c:\readme.txt")

    觸發事件:

    Private Sub w_DownloadProgressChanged(ByVal sender As Object, _
          ByVal e As System.Net.DownloadProgressChangedEventArgs) _
          Handles w.DownloadProgressChanged
        RaiseEvent DownloadProgressChanged(e.BytesReceived, totalBytes)
    End Sub

    撰寫事件:

    Private Sub ftp_DownloadProgressChanged(ByVal bytesDownloaded As Long, _
            ByVal totalBytes As Long)
        prgProgress.Max = totalBytes
        prgProgress.Value = bytesDownloaded
    End Sub

    COM 的部份可以不用管他,那是因為這篇原先是把 ftp 功能寫成 COM 元件,發布給 VB6 用的,.Net 可以跳過這段。

    原文網址:http://msdn.microsoft.com/msdnmag/issues/06/05/WrapItUp/

    2006年12月18日 上午 09:50
    版主

所有回覆

  • My.Computer.Network.DownloadFile 方法可以用於下載遠端檔案,並存放到特定位置。如果 ShowUI 參數設定為 True,則會顯示對話方塊以顯示下載進度,並允許使用者取消作業。根據預設,不會覆寫具有相同名稱的現有檔案。若要覆寫現有檔案,請將 overwrite 參數設定為 True

    若要再深入一點,就要自己看 HTTP 的 Header,因為裡面會有一個資料下載大小的訊息欄位(Content-Length)。

    HTTP Specification (RFC 2616) :
    ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt

    2006年12月16日 上午 02:11
    版主
  • 不好意思,還是有地方不了解
    雖然My.Computer.Network.DownloadFile的方式已經會用了
    跟DownloadFile的用法差不多

    可是如果不要用對話框顯示的下載進度
    改用ProgressBar應該怎麼做呢?
    我想問的是因為這樣做必須要得知檔案的容量大小
    才有辦法應用到ProgressBar上
    還是說有別的方式能夠直接應用在ProgressBar上嗎?

    2006年12月16日 上午 03:18
  • 如果單純以 My.Computer.Network.DownloadFile() 來看,沒辦法。

    你要使用像 HttpWebRequest, HttpWebResponse 或是 TcpClient 來抓取檔案,才能夠取得它的 Content-Length 資訊。

    2006年12月16日 上午 03:41
    版主
  • 小朱:不是吐你槽,我也跟你一樣以為不行,不過剛好看到 MSDN 網站上有範例...

    程式碼網址:http://msdn.microsoft.com/msdnmag/issues/06/05/WrapItUp/default.aspx?loc=&fig=true

    主要是用啟動一個非同步的下載:

    w.DownloadFileAsync(New System.Uri(address), "c:\readme.txt")

    觸發事件:

    Private Sub w_DownloadProgressChanged(ByVal sender As Object, _
          ByVal e As System.Net.DownloadProgressChangedEventArgs) _
          Handles w.DownloadProgressChanged
        RaiseEvent DownloadProgressChanged(e.BytesReceived, totalBytes)
    End Sub

    撰寫事件:

    Private Sub ftp_DownloadProgressChanged(ByVal bytesDownloaded As Long, _
            ByVal totalBytes As Long)
        prgProgress.Max = totalBytes
        prgProgress.Value = bytesDownloaded
    End Sub

    COM 的部份可以不用管他,那是因為這篇原先是把 ftp 功能寫成 COM 元件,發布給 VB6 用的,.Net 可以跳過這段。

    原文網址:http://msdn.microsoft.com/msdnmag/issues/06/05/WrapItUp/

    2006年12月18日 上午 09:50
    版主
  • A.... 那不是用內建的方法吧?
    我是說光是以 My.Computer.Network.DownloadFile() 這支程式來說,不行。

    用 System.Net.WebClient 的 DownloadFileAsync 就可以了啊 =.=
    好啦,算我失察了 ...

    2006年12月18日 上午 10:19
    版主