Como verificar con C# si un archivo existe en un servidor remoto, sin descargar el archivo
Con este codigo de C# se puede verificar si un archivo existe en un servidor remoto, sin bajarlo.
var request = WebRequest.Create(new Uri("http://www.site.com/file1.zip")); request.Method = "HEAD"; try { var response = request.GetResponse(); Console.WriteLine("{0} - {1}", response.ContentLength, response.ContentType); } catch (WebException ex) { var resp = (HttpWebResponse) ex.Response; if (resp.StatusCode == HttpStatusCode.NotFound) { Console.WriteLine("File does not exist"); } }
La diferencia es el uso del metodo HEAD en lugar de POST o GET. El metodo HEAD regresa exactamente los mismos Headers que un request tipo GET, con la excepcion de que no transfiere el message-body, o en este caso, el contenido del archivo en bytes. Este codigo funciona para verificar la existencia de archivos fisicos, o URLs virtuales (ya que no siempre un URL corresponde a un archivo fisico).
Una vez que obtenemos una respuesta, podemos verificar varias propiedades del archivo, como el tamaño (ContentLength) o el tipo (ContentType). Si el archivo no existe, el Framework va a lanzar una WebException, de la cual tomamos la propiedad Response y le podemos hacer un cast al tipo HttpWebResponse, para poder verificar el error especifico HTTP que el servidor arrojó. Si el codigo es 404, significa que el archivo no existe.
Espero les sirva.