2009-09-18 96 views
0

如何檢查ASP.Net中的Web位置(在不同的Web應用程序中,但是同一個Web服務器)中的文件退出,目前我這樣做。有沒有更好的方法來做到這一點?如何檢查使用C#查看遠程文件是否存在?

using (WebClient client = new WebClient()) 
{ 
      try 
      { 
       Stream stream = client.OpenRead("http://localhost/images/myimage.jpg"); 
       if (stream != null) 
       { 
        //exists 
       } 
      } 
      catch 
      { 
       //Not exists 
      } 
} 
+0

添加了對異常的評論。 – 2009-09-18 10:03:40

回答

1

如果文件是通過HTTP訪問,您可以發出使用HttpWebRequest該特定URL的HTTP頭requrest。如果HttpWebResponse.StatusCode將是200,那麼文件就在那裏。

編輯:參見爲什麼GetResponse拋出異常愚蠢的時候,它實際上不應該這樣做this

+0

HttpWebRequest request = WebRequest.Create(「url」)爲HttpWebRequest; request.Method =「HEAD」; HttpWebResponse response = request.GetResponse()as HttpWebResponse; if(response.StatusCode == HttpStatusCode.NotFound) 我寫了這樣的代碼,但我從GetResponse()行本身得到了異常。 – Anuraj 2009-09-18 09:34:20

-1

404或Not Found錯誤消息是一個HTTP標準響應代碼,指示客戶端能夠與服務器通信,但服務器找不到請求的內容。 404錯誤表示請求的資源可能在未來可用。

您可以使用HEAD請求(HttpWebRequest.Method =「HEAD」)

0

可以使用向使用Server.Mappath取得的目錄,然後檢查使用IO標準方法,如File.Exists如果文件存在

+0

對不起,我忘了提及它,它在一個不同的Web應用程序,所以我不能使用Server.MapPath。 – Anuraj 2009-09-18 09:14:06

2

記住,你永遠不會得到一個文件的存在100%的明確迴應,但我做這將是非常類似於你的方式......

bool remoteFileExists(string addressOfFile) 
{ 
    try 
    { 
     HttpWebRequest request = WebRequest.Create(addressOfFile) as HttpWebRequest; 
     request.Method = "HEAD"; 
     request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore); 
     var response = request.GetResponse() as HttpWebResponse; 
     return (response.StatusCode == HttpStatusCode.OK); 
    } 
    catch(WebException wex) 
    { 
     return false; 
    } 
} 

編輯::看編輯通過上面的Anton Gogolev(How can one check to see if a remote file exists using C#)我應該已將響應轉換爲HttpWebResponse對象並檢查了狀態碼。編輯代碼以反映該問題

+0

如果文件不存在,我從GetResponse()行中獲取WebException。所以我無法獲得響應頭的數量。 – Anuraj 2009-09-18 09:43:43

+0

@Anuraj - 是的,這是預期的(雖然不合需要)的行爲。我寧願不使用流量的例外情況,但我沒有其他的建議可以推薦我的頭頂.... – ZombieSheep 2009-09-18 09:53:10