Как проверить, существует ли файл на сервере с помощью С# и класса WebClient
В моем приложении я использую класс WebClient для загрузки файлов с веб-сервера, просто вызывая метод DownloadFile. Теперь мне нужно проверить, существует ли какой-либо файл до его загрузки (или в случае, если я просто хочу убедиться, что он существует). У меня есть два вопроса:
- Каков наилучший способ проверить, существует ли файл на сервере, не передавая много данных по проводу? (Это довольно большое количество файлов, которые мне нужно проверить)
- Есть ли способ получить размер заданного удаленного файла без его загрузки?
Спасибо заранее!
Ответы
Ответ 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.
Надеюсь, это поможет!