Como verificar se existe um arquivo em um servidor usando c # e a classe WebClient
Pergunta
Na minha aplicação eu uso o WebClient classe para baixar arquivos de um servidor web simplesmente chamando o DownloadFile método. Agora eu preciso verificar se um determinado arquivo existe antes de baixá-lo (ou, no caso eu só quero ter certeza de que ela existe). Eu tenho duas perguntas com isso:
- O que é a melhor maneira de verificar se existe um arquivo em um servidor sem transferir a quantidade de dados através do fio? (É bastante um grande número de arquivos eu preciso verificar)
- Existe uma maneira de obter o tamanho de um determinado arquivo remoto sem baixá-lo?
Agradecemos antecipadamente!
Solução
WebClient
é bastante limitada; se você passar a usar WebRequest
, então você ganha a habilidade para enviar uma solicitação HTTP HEAD. Quando você envia o pedido, você deve obter um erro (se o arquivo está faltando), ou um WebResponse
com uma propriedade ContentLength
válido.
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);
}
Outras dicas
Quando você solicita arquivo usando o WebClient Class, o erro 404 (arquivo não encontrado) vai levar a uma exceção. A melhor maneira é para lidar com essa exceção e usar uma bandeira que pode ser definido para ver se o arquivo existe ou não.
O código de exemplo é o seguinte:
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!!!");
}
Você pode colocar o seu código nos respectivos se os blocos. Espero que ajude!