Вывод процесса загрузки файла из интернета на консоль - C#
Формулировка задачи:
Доброго времени суток. Не могу найти как правильно выводить процесс загрузки на консоль.
Нужно загрузить файл, что то вроде этого:
Как видоизменить код что бы отображалась загрузка в процентах.
В книге братьев Албахари нашел такой код. Но никак реализовать его грамотно не выходит, процесс загрузки тупо не отображается.
Подскажите правильную реализацию, или по крайней мере в какую сторону копать нужно. Спс.
WebClient wc = new WebClient(); wc.Proxy = null; wc.DownloadFile("http://.....", "file.mp4");
var wc = new WebClient(); wc.DownloadProgressChanged += (sender, args) => Console.WriteLine (args.ProgressPercentage + "% complete"); Task.Delay (5000).ContinueWith (ant => wc.CancelAsync()); await wc.DownloadFileTaskAsync ("http://.....", "file.mp4");
Решение задачи: «Вывод процесса загрузки файла из интернета на консоль»
textual
Листинг программы
static readonly object sync = new object(); static readonly ConsoleColor[] Gradient = { ConsoleColor.Red, ConsoleColor.DarkYellow, ConsoleColor.Yellow, ConsoleColor.DarkGreen, ConsoleColor.Green }; static readonly string[] Suffixes = { "B", "KB", "MB", "TB" }; static void Main(string[] args) { var http = new WebClient(); http.DownloadProgressChanged += ProgressCallback; http.DownloadFileCompleted += CompletedCallback; Console.CursorVisible = false; Console.WriteLine("Downloading ... "); http.DownloadFileTaskAsync("http://video.ch9.ms/ch9/92c6/15fdfbaa-2f86-490e-9f3e-6f8e5c8192c6/20150529TWC9_mid.mp4", @"d:\20150529TWC9_mid.mp4").Wait(); Console.ReadLine(); } private static void CompletedCallback(object sender, AsyncCompletedEventArgs e) { Console.SetCursorPosition(0, Console.CursorTop + 1); Console.ResetColor(); Console.WriteLine("Done!"); } private static void ProgressCallback(object sender, DownloadProgressChangedEventArgs e) { var color = Gradient[(int)(e.ProgressPercentage / 100.0 * (Gradient.Length - 1))]; var progress = string.Format("|{0,-30}| {1,3}% {2,9} / {3,-9}", new string((char)0x2592, e.ProgressPercentage * 30 / 100), e.ProgressPercentage, FormatSize(e.BytesReceived), FormatSize(e.TotalBytesToReceive)); lock (sync) { Console.SetCursorPosition(0, 1); Console.ForegroundColor = color; Console.Write(progress); } } static string FormatSize(double size) { int grade = (int)Math.Log(size, 1024); grade = Math.Min(grade, Suffixes.Length); return string.Format("{0:N2}{1}", size / Math.Pow(1024, grade), Suffixes[grade]); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д