2009-09-18 93 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