Cómo verificar si existe un archivo en un servidor usando C # y la clase WebClient
Pregunta
En mi aplicación, uso la clase WebClient para descargar archivos de un servidor web simplemente llamando al método DownloadFile . Ahora necesito verificar si existe un determinado archivo antes de descargarlo (o en caso de que solo quiera asegurarme de que existe). Tengo dos preguntas con eso:
- ¿Cuál es la mejor manera de verificar si un archivo existe en un servidor sin transferir muchos datos a través del cable? (Es una gran cantidad de archivos que necesito verificar)
- ¿Hay alguna manera de obtener el tamaño de un archivo remoto determinado sin descargarlo?
¡Gracias de antemano!
Solución
WebClient
es bastante limitado; si cambia a usar WebRequest
, entonces puede enviar una solicitud HTTP HEAD. Cuando emite la solicitud, debería recibir un error (si falta el archivo) o un WebResponse
con una propiedad válida ContentLength
.
Editar: Código de ejemplo:
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);
}
Otros consejos
Cuando solicita un archivo utilizando la clase WebClient , el error 404 (archivo no encontrado) dará lugar a una excepción. La mejor manera es manejar esa excepción y usar una bandera que se pueda configurar para ver si el archivo existe o no.
El código de ejemplo es el siguiente:
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!!!");
}
Puede poner su código en los respectivos bloques if. ¡Espero que ayude!