С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 20

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

31.05.2015, 14:00. Показов 4565. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Не могу найти как правильно выводить процесс загрузки на консоль.
Нужно загрузить файл, что то вроде этого:
C#
1
2
3
WebClient wc = new WebClient();
wc.Proxy = null;
wc.DownloadFile("http://.....", "file.mp4");
Как видоизменить код что бы отображалась загрузка в процентах.

В книге братьев Албахари нашел такой код. Но никак реализовать его грамотно не выходит, процесс загрузки тупо не отображается.

C#
1
2
3
4
5
6
7
8
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");
Подскажите правильную реализацию, или по крайней мере в какую сторону копать нужно. Спс.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2015, 14:00
Ответы с готовыми решениями:

Как узнать или ограничить скорость загрузки/раздачи интернета у процесса?
Живу с одним человеком, и живем на одном интернете, он постоянно ставит скорость скачек почти фулл, не давая другим сидеть, признавать...

Отображение процесса загрузки файла на сервер
Подскажите как сделать так чтобы отображался процесс загрузки файла на сервер, например сколько время осталось или на сколько % уже...

Отслеживание процесса загрузки файла используя функцию URLDownloadToFile
Как можно отследить прогресс загрузки файла, из Интернет, используя функцию URLDownloadToFile. Заранее спасибо!!!

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14169 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
01.06.2015, 01:14
C#
1
2
3
4
5
6
7
8
9
WebClient http = new WebClient();
int currentProgress = -1;
http.DownloadProgressChanged += (sender, args) => {
    if (currentProgress != args.ProgressPercentage) {
        Console.WriteLine(args.ProgressPercentage + "% complete");
        currentProgress = args.ProgressPercentage;
    }        
};
await http.DownloadFileTaskAsync("http://.....", "file.mp4");
0
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 20
01.06.2015, 21:53  [ТС]
Что то результат тот же Файл создается весом 0 байт. Но на консоле никаких изменений. Может есть еще какие-нибудь нюансы помимо написанного Вами кода.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18245 / 14169 / 5366
Регистрация: 17.03.2014
Сообщений: 28,848
Записей в блоге: 1
02.06.2015, 01:00
NewBody, возможно сайт с которого ты качаешь не сообщает размер файла. В этом случае прогресс нельзя отследить. Попробуй скачать видео (141 Мб) с channel9. У меня прогресс выводится. Единственное что пришлось немного изменить Main:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static void Main(string[] args)
{
    Main().Wait();
    Console.WriteLine("Done");
}
static async Task Main()
{
    WebClient http = new WebClient();
    int currentProgress = -1;
    http.DownloadProgressChanged += (sender, e) =>
    {
        if (currentProgress != e.ProgressPercentage)
        {
            Console.WriteLine(e.ProgressPercentage + "% complete");
            currentProgress = e.ProgressPercentage;
        }
    };
    Console.Write("Downloading ... ");
    await http.DownloadFileTaskAsync("http://video.ch9.ms/ch9/92c6/15fdfbaa-2f86-490e-9f3e-6f8e5c8192c6/20150529TWC9_mid.mp4", @"d:\20150529TWC9_mid.mp4");
}
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.06.2015, 13:40
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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]);
}
:black_eye.:
0
0 / 0 / 0
Регистрация: 31.03.2015
Сообщений: 20
05.06.2015, 18:35  [ТС]
Спс, походу Вы правы, с других сайтов норм отображается.
0
05.06.2015, 18:57

Не по теме:

kolorotur, GB же еще в Suffixes?)

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
05.06.2015, 19:33
Цитата Сообщение от Георгий713 Посмотреть сообщение
GB же еще в Suffixes?
Точно, упустил
Сейчас вместо ГБ будет показывать ТБ.
Достаточно вставить ГБ между МБ и ТБ и будет работать без изменений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2015, 19:33
Помогаю со студенческими работами здесь

Из своего кода запустить процесс, но чтобы вывод этого процесса был в консоль программы
Необходимо из своего кода запустить процесс, но чтобы вывод этого процесса был в консоль моей программы (проще говоря, как в пакетном...

Вывод графических примитивов в консольное окно посредством загрузки в консоль bmp изображения
Добрый день! Хочу "написать" код для вывода графических примитивов в консольное окно посредством загрузки в консоль bmp изображения....

Реализовать поиск файла в каталоге и вывод на консоль заданных атрибутов найденного файла
Приведите, пожалуйста, пример кода программы, которая ищет файлы, находящиеся в каталоге, и выдаёт на консоль имя, тип и дату последней...

Вывод файла на консоль
Мне нужно, чтобы на консоль данные из файла выводились не в строку, а так как они расположены в файле, например: 78877авпв вап ав п87 ...

Вывод из файла в консоль
Не получается вывести содержимое первого файла в консоль и полученное содержимое в консоль #include "pch.h" #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru