Подтвердить что ты не робот

Как проверить, существует ли файл на сервере с помощью С# и класса WebClient

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

Когда вы запрашиваете файл с помощью класса 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. Надеюсь, это поможет!