Как проверить, существует ли файл на сервере, используя c # и класс WebClient - PullRequest
19 голосов
/ 06 мая 2009

В своем приложении я использую класс WebClient для загрузки файлов с веб-сервера, просто вызывая метод DownloadFile . Теперь мне нужно проверить, существует ли определенный файл перед его загрузкой (или в случае, если я просто хочу убедиться, что он существует). У меня есть два вопроса с этим:

  1. Как лучше всего проверить, существует ли файл на сервере, не передавая слишком много данных по проводам? (Это довольно большое количество файлов, которые мне нужно проверить)
  2. Есть ли способ получить размер заданного удаленного файла без его загрузки?

Заранее спасибо!

Ответы [ 2 ]

39 голосов
/ 06 мая 2009

WebClient довольно ограничен; если вы переключитесь на WebRequest, вы получите возможность отправлять HTTP-запрос HEAD. Когда вы отправляете запрос, вы должны либо получить ошибку (если файл отсутствует), либо WebResponse с допустимым свойством ContentLength.

Редактировать: Пример кода:

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);
}
4 голосов
/ 05 марта 2014

Когда вы запрашиваете файл, используя класс WebClient , ошибка 404 (файл не найден) приведет к исключению. Лучший способ - обработать это исключение и использовать флаг, который можно установить, чтобы увидеть, существует файл или нет.

Пример кода выглядит следующим образом:

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!!!");
}

Вы можете поместить свой код в соответствующие блоки if. Надеюсь, это поможет!

...