Вывод процесса загрузки файла из интернета на консоль - 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]);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д