none
取得遠端檔案大小 RRS feed

  • 問題

  • 您好:
    小弟目前遇撰寫的軟體需要下載功能,
    目前這個功能是由Microsoft.VisualBasic.Devices.Network.DownloadFile()來製作。
    但我希望能夠在UI上顯示出進度,我知道DownloadFile有提供這個功能,可是我想實作,
    我的問題在於不知道如何取得遠端檔案的大小。
    我嘗試過使用WebClient.OpenRead()來讀取資料流長度,但是這好像需要伺服器端有開啟權限。
    由於伺服器不是自己的,不知道該使用哪個Class來達到這個功能呢?
    2010年1月3日 上午 03:20

解答

  • 剛剛才發現, 這玩意很久以前小朱就回答過了, 你是想用ProgressBar做效果吧 ?
    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/8ecfe4b4-28db-4ec6-9a66-a4c43e7294d4

    補充:
      我剛剛測試了HttpWebResponse.ContentLength <--這個屬性對html可能會無效, 因為html檔通常沒有帶ContentLength標頭, 不過如果是圖檔, 壓縮檔可以了
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已提議為解答 bauann 2010年1月4日 上午 04:09
    • 已標示為解答 Lolota Lee 2010年1月8日 上午 09:21
    2010年1月3日 上午 07:22
    版主

所有回覆

  • 1. 使用 [FtpWebRequest 類別 ]
    2. 設定[FtpWebRequest. ethod 屬性 ] 為  [WebRequestMethods. Ftp. GetFileSize ]
    3. 另請參閱[WebRequestMethods. Ftp 類別 ] 與[How to: Download Files with FTP ]
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 上午 03:50
    版主
  • 抱歉 我看不太懂

                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("http://tw.news.yahoo.com/article/url/d/a/100103/4/1y3sf.html"));
                request.Method = WebRequestMethods.Ftp.GetFileSize;
                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                string s = response.StatusDescription;

    這是我的code 不知道哪裡錯了 因為msdn也是這樣寫的 可是我再debug的時候他說無法第一行無法轉型
    2010年1月3日 上午 05:21
  • ftp的話, Uri應該是 ftp ://tw.news.yahoo.com/article/url/d/a/100103/4/1y3sf.html
    在ftpWebRequest類別有說明:

    若要取得 FtpWebRequest 的執行個體,請使用 Create 方法。您也可以使用 WebClient 類別,上載資料至 FTP 伺服器並從 FTP 伺服器下載資訊。只要使用以上任何一種方法,當您指定使用 FTP 配置 (例如,<tt>"ftp://contoso.com"</tt> ) 的網路資源時,FtpWebRequest 類別都能讓您以程式設計方式與 FTP 伺服器互動。

    這個 URI 可為相對或絕對的。如果 URI 的格式為 <tt>"ftp://contoso.com/%2fpath"</tt> (%2f 是逸出字元 '/'),則 URI 是絕對的,目前的目錄為 /path 。不過,如果 URI 的格式為 <tt>"ftp://contoso.com/path"</tt> ,則首先 .NET Framework 會登入 FTP 伺服器 (使用 Credentials 屬性設定的使用者名稱和密碼),然後將目前的目錄設為 <UserLoginDirectory>/path

    MSDN哪一段的 ftp Uri寫成 http:// ? , 可以提供一下連結嗎 ?


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 上午 05:29
    版主
  • MSDN上的範例是方法並沒有給連結

    於是我隨便帶一個
    但是我將HTTP改成FTP後會沒有反應
    我要取得的是HTTP伺服器上的文件資訊

    2010年1月3日 上午 05:45
  • 如果協定是Http, 那就不能用FtpWebRequest了. 因為你的那個網址不並支援 ftp協定, 所以FtpWebRequest派不上用場.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2010年1月3日 上午 06:00
    版主
  • 那有其他的辦法嗎= =?
    2010年1月3日 上午 06:37
  • 剛剛才發現, 這玩意很久以前小朱就回答過了, 你是想用ProgressBar做效果吧 ?
    http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/8ecfe4b4-28db-4ec6-9a66-a4c43e7294d4

    補充:
      我剛剛測試了HttpWebResponse.ContentLength <--這個屬性對html可能會無效, 因為html檔通常沒有帶ContentLength標頭, 不過如果是圖檔, 壓縮檔可以了
    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    • 已提議為解答 bauann 2010年1月4日 上午 04:09
    • 已標示為解答 Lolota Lee 2010年1月8日 上午 09:21
    2010年1月3日 上午 07:22
    版主
  • 萬分感謝 問題已經解決

    直接從事件抓最大值跟最小值
    2010年1月3日 上午 08:45
  • 先前有討論過,不過沒找到:
    Net.WebRequest.Method = "HEAD"

    如果有檔案大小,會出現在回傳的 HEAD 中。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月4日 上午 07:29