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

StackOverflow https://stackoverflow.com/questions/830435

Вопрос

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

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

    Это было полезно?

    Решение

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

    Другие советы

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top