Вывод процесса загрузки файла из интернета на консоль - 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]);
}

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы