2009-05-06 201 views
19

En mi solicitud utilizo la clase WebClient para descargar archivos desde un servidor web, simplemente llamando al métodoDownloadFile. Ahora necesito verificar si existe un cierto archivo antes de descargarlo (o en caso de que solo quiera asegurarme de que existe). Tengo dos preguntas con eso:¿Cómo comprobar si existe un archivo en un servidor usando C# y la clase WebClient

  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 cantidad bastante grande de archivos que debo verificar)
  2. ¿Hay alguna manera de obtener el tamaño de un archivo remoto determinado sin descargarlo?

¡Gracias de antemano!

+0

Es posible que desee modificar el título de su pregunta para dejar en claro que está utilizando WebClient y que su código no se está ejecutando directamente en el servidor web. –

+0

Eso hizo. Gracias por la pista. – Mats

+0

Aquí hay un blog post que escribí con respecto a este asunto en el pasado. Lo estoy poniendo aquí para futuras búsquedas ... –

Respuesta

39

WebClient es bastante limitado; si cambia a usar WebRequest, entonces obtiene la capacidad de enviar una solicitud HTTP HEAD. Cuando emite la solicitud, debe obtener un error (si falta el archivo) o un WebResponse con una propiedad válida ContentLength.

Editar: código 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); 
} 
+0

¡Gracias por tu respuesta! He visto que puedo obtener una respuesta a través del método GetResponse() y luego verificar ContentLength. Pero, ¿esto asegura que no se descargue todo el archivo? No puedo encontrar una forma de enviar una solicitud HTTP HEAD. ¿Podrías dirigirme en la dirección correcta? – Mats

+0

@Matthias Cree una WebRequest con WebRequest.Create (uri) y luego establezca la propiedad 'Método' en "HEAD". – chakrit

+0

Lo que dijo el chakrit; también, ver ejemplo. –

4

Cuando se solicita el archivo utilizando el cliente Web clase, el error 404 (archivo no encontrado) dará lugar a una excepción. La mejor manera es manejar esa excepción y usar un indicador que se puede establecer 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!!!"); 
} 

Usted puede poner su código en si respectivos bloques. Espero que ayude!

Cuestiones relacionadas