2009-05-06 71 views
19

在我的應用程序使用WebClient的類通過簡單地調用DownloadFile方法從Web服務器下載文件的服務器上存在。現在我需要檢查某個文件在下載之前是否存在(或者我只是想確保它存在)。我有兩個問題:如何檢查文件是否使用C#和WebClient類

  1. 什麼是最好的方式來檢查服務器上是否存在一個文件,而不通過電纜傳輸到很多數​​據? (這是相當數量的文件,我需要檢查)
  2. 有沒有一種方法來獲取給定的遠程文件的大小,而無需下載它?

在此先感謝!

+0

您可能想要修改問題的標題,以清楚地表明您正在使用WebClient,並且您的代碼未直接在Web服務器上運行。 – 2009-05-06 16:33:52

+0

是否做到了。感謝提示。 – Mats 2009-05-06 16:51:19

回答

39

WebClient相當有限;如果您切換到使用WebRequest,那麼您將獲得發送HTTP HEAD請求的能力。當您發出請求時,您應該得到一個錯誤(如果文件丟失)或WebResponse與有效的ContentLength屬性。

編輯:示例代碼:

WebRequest request = WebRequest.Create(new Uri("http://www.example.com/")); 
request.Method = "HEAD"; 

using(WebResponse response = request.GetResponse()) { 
    Console.WriteLine("{0} {1}", response.ContentLength, response.ContentType); 
} 
4

當使用Web客戶端類請求文件,404錯誤(未找到文件)將導致一個異常。最好的辦法是處理這個異常並使用可以設置的標誌來查看文件是否存在。

的示例代碼去如下:

System.Net.HttpWebRequest request = null; 
System.Net.HttpWebResponse response = null; 
request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("www.example.com/somepath"); 
request.Timeout = 30000; 
try 
{ 
    response = (System.Net.HttpWebResponse)request.GetResponse(); 
    flag = 1; 
} 
catch 
{ 
    flag = -1; 
} 

if (flag==1) 
{ 
    Console.WriteLine("File Found!!!"); 
} 
else 
{ 
    Console.WriteLine("File Not Found!!!"); 
} 

你可以把你的代碼在各自if塊。 希望它有幫助!