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

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

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

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

2 ответов


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

Edit: пример кода:

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

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