0

Подскажите, пожалуйста. С адреса https://physics.nist.gov/cuu/Constants/Table/allascii.txt скачивается пустой файл. С других адресов качаю без проблем.

Использую стандартный код на C#

using (WebClient wc = new WebClient())
{              
wc.DownloadProgressChanged += wc_DownloadProgressChanged;
wc.DownloadFileAsync(              
new Uri("https://physics.nist.gov/cuu/Constants/Table/allascii.txt"),
@"C:\Users\User\Desktop\arhiv\fc1.html" );
 //while (wc.IsBusy) { }
}

1 Answers1

1

Вы уничтожаете WebClient с помощью using до того как страница будет загружена. Поэтому и пусто.

Но если очень надо, то можно попробовать вот так:

WebClient wc = new WebClient();
wc.DownloadProgressChanged += wc_DownloadProgressChanged;
wc.DownloadDataCompleted += (s, e) => wc.Dispose();
wc.DownloadFileAsync(url, path);

Но вообще WebClient устарел, используйте HttpClient.

private static readonly HttpClient client = new HttpClient();

static async Task Main(string[] args) { string text = await client.GetStringAsync("https://physics.nist.gov/cuu/Constants/Table/allascii.txt"); File.WriteAllText("file.txt", text); Console.ReadKey(); }

Вывод в файл file.txt, начальные несколько строк:

             Fundamental Physical Constants --- Complete Listing
             2018 CODATA adjustment

From: http://physics.nist.gov/constants

Quantity Value Uncertainty Unit

alpha particle-electron mass ratio 7294.299 541 42 0.000 000 24
alpha particle mass 6.644 657 3357 e-27 0.000 000 0020 e-27 kg alpha particle mass energy equivalent 5.971 920 1914 e-10 0.000 000 0018 e-10 J

Вообще файл весит 40 килобайт, смысла отображать прогресс загрузки не вижу. Если же вам надо качать огромные файлы в несколько гигабайт, то докачка в случае разрыва соединения тоже бы не помешала - вот пример.

aepot
  • 49,560
  • 1
    Спасибо за рекомендации. Обошелся малой кровью. Добавил строку с SSL ( в инете нашел совет) , без нее сервер не давал разрешения скачать файл. – Андрей Nov 24 '21 at 13:03
  • @Андрей Endpoint конфигурация? Быть может у вас .NET Framework старый? Начиная с .NET Framework 4.6.1, проблемы с TLS не должно возникать. Если я угадал, то обновление версии фреймворка заставит все рабротать и без этой строчки. – aepot Nov 24 '21 at 13:07
  • Возможно, строка такая ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; – Андрей Nov 28 '21 at 12:41
  • @Андрей именно. Ставите новее версию фреймворка, например 4.7.2, удаляете строку, и все работает. Если это .NET Core 3 или .NET 5/6, то эта строка там в принципе не имеет никакого эффекта. – aepot Nov 28 '21 at 12:51