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