Вывод процесса загрузки файла из интернета на консоль - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Не могу найти как правильно выводить процесс загрузки на консоль. Нужно загрузить файл, что то вроде этого:
Листинг программы
  1. WebClient wc = new WebClient();
  2. wc.Proxy = null;
  3. wc.DownloadFile("http://.....", "file.mp4");
Как видоизменить код что бы отображалась загрузка в процентах. В книге братьев Албахари нашел такой код. Но никак реализовать его грамотно не выходит, процесс загрузки тупо не отображается.
Листинг программы
  1. var wc = new WebClient();
  2. wc.DownloadProgressChanged += (sender, args) =>
  3. Console.WriteLine (args.ProgressPercentage + "% complete");
  4. Task.Delay (5000).ContinueWith (ant => wc.CancelAsync());
  5. await wc.DownloadFileTaskAsync ("http://.....", "file.mp4");
Подскажите правильную реализацию, или по крайней мере в какую сторону копать нужно. Спс.

Решение задачи: «Вывод процесса загрузки файла из интернета на консоль»

textual
Листинг программы
  1. static readonly object sync = new object();
  2. static readonly ConsoleColor[] Gradient =
  3. {
  4.     ConsoleColor.Red,
  5.     ConsoleColor.DarkYellow,
  6.     ConsoleColor.Yellow,
  7.     ConsoleColor.DarkGreen,
  8.     ConsoleColor.Green
  9. };
  10.  
  11. static readonly string[] Suffixes =
  12. {
  13.     "B",
  14.     "KB",
  15.     "MB",
  16.     "TB"
  17. };
  18.  
  19. static void Main(string[] args)
  20. {
  21.     var http = new WebClient();
  22.     http.DownloadProgressChanged += ProgressCallback;
  23.     http.DownloadFileCompleted += CompletedCallback;
  24.  
  25.     Console.CursorVisible = false;
  26.     Console.WriteLine("Downloading ... ");
  27.     http.DownloadFileTaskAsync("http://video.ch9.ms/ch9/92c6/15fdfbaa-2f86-490e-9f3e-6f8e5c8192c6/20150529TWC9_mid.mp4", @"d:\20150529TWC9_mid.mp4").Wait();
  28.  
  29.     Console.ReadLine();
  30. }
  31.  
  32. private static void CompletedCallback(object sender, AsyncCompletedEventArgs e)
  33. {
  34.     Console.SetCursorPosition(0, Console.CursorTop + 1);
  35.     Console.ResetColor();
  36.     Console.WriteLine("Done!");
  37. }
  38.  
  39. private static void ProgressCallback(object sender, DownloadProgressChangedEventArgs e)
  40. {
  41.     var color = Gradient[(int)(e.ProgressPercentage / 100.0 * (Gradient.Length - 1))];
  42.     var progress = string.Format("|{0,-30}| {1,3}% {2,9} / {3,-9}",
  43.         new string((char)0x2592, e.ProgressPercentage * 30 / 100),
  44.         e.ProgressPercentage,
  45.         FormatSize(e.BytesReceived),
  46.         FormatSize(e.TotalBytesToReceive));
  47.  
  48.     lock (sync)
  49.     {
  50.         Console.SetCursorPosition(0, 1);
  51.         Console.ForegroundColor = color;
  52.         Console.Write(progress);
  53.     }
  54. }
  55.  
  56. static string FormatSize(double size)
  57. {
  58.     int grade = (int)Math.Log(size, 1024);
  59.     grade = Math.Min(grade, Suffixes.Length);
  60.  
  61.     return string.Format("{0:N2}{1}", size / Math.Pow(1024, grade), Suffixes[grade]);
  62. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы