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:

  1. ¿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)
  2. ¿Hay alguna manera de obtener el tamaño de un archivo remoto determinado sin descargarlo?

¡Gracias de antemano!

¿Fue útil?

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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top