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:

  1. 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)
  2. Existe uma maneira de obter o tamanho de um determinado arquivo remoto sem baixá-lo?

Agradecemos antecipadamente!

Foi útil?

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.

Editar: código Exemplo:

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top