Форум программистов, компьютерный форум, киберфорум
motokraft
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
Освоение языка программирования C#. Простые действия для создания простых программы...

Скачивание Файла с Помощью HTTP://

Запись от motokraft размещена 10.01.2014 в 14:42
Показов 2805 Комментарии 0

[I]Самый простой способ Скачивания Файла.[/I]
Для работы необходимо подключить библиотеку [B][I][U]using System.Net;[/U][/I][/B]
[CSHARP]WebClient webClient = new WebClient();
webClient.DownloadFile("http://mysite.com/myfile.txt", @"c:\myfile.txt");[/CSHARP]

Скачивание Файла с Использованием [I][B]РrogressBar-а[/B][/I]
Для загрузки файла по http не блокируя при этом основного потока необходимо воспользоваться методом [URL="http://msdn.microsoft.com/ru-ru/library/ms144196.aspx"]DownloadFileAsync[/URL]. Также можно обработать событие DownloadProgressChanged для индикации процесса загрузки файла и событие DownloadFileCompleted для определения момента, когда файл будет полностью загружен.
[CSHARP]private void btnDownload_Click(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://mysite.com/myfile.txt"), @"c:\myfile.txt");
}

private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}

private void Completed(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Download completed!");
}[/CSHARP]

[B][I]Скачка файла с отображением процесса загрузки при помощи WebRequest.[/I][/B]
Для того что бы скачать файл с помощью класса WebRequest потребуется немного больше усилий чем в способах описанных выше и особой выгоды от этого не будет, но рассмотреть их тоже стоит.

Для этого необходимо послать запрос по необходимому адресу и в ответе будет содержаться ссылка на поток с данными:
[CSHARP]HttpWebRequest _req = (HttpWebRequest) WebRequest.Create(“[url]http://mysite.com/myfile.txt”);[/url]
WebResponse _response = _req.GetResponse();
Stream _stream = _response.GetResponseStream();[/CSHARP]
[B][I]Для того что бы сохранить данные на диске необходимо в цикле прочитать содержимое потока полученного в результате выполнения запроса, например вот так:[/I][/B]
[CSHARP]FileStream _fs = new FileStream(“myfile.txt”, FileMode.Create)

int _bytesRead = 1;
while (_bytesRead != 0)
{
byte[] buffer = new byte[1024];
_bytesRead = _stream.Read(buffer, 0, buffer.Length);
_fs.Write(buffer, 0, buffer.Length);
}[/CSHARP]
[I][B]Запустив все эти действия в отдельном потоке, в основном потоке можно отображать процесс загрузки. Так как работать с визуальными компонентам инеобходимо из потока в котором они создавались, то для изменения например ProgressBar стоит воспользоваться методом Invoke():[/B][/I]
[CSHARP]public delegate void dClose();
private delegate void dProgressInit(ProgressBar aPb, Int32 aMaxValue);
private delegate void dProgressValue(ProgressBar aPb, Int32 aValue);

private void ProgressInit(ProgressBar aPb, Int32 aMaxValue)
{
aPb.Maximum = aMaxValue;
}

private void ProgressValue(ProgressBar aPb, Int32 aValue)
{
aPb.Value = aValue;
}

private void DownloadFiles()
{

HttpWebRequest _req = (HttpWebRequest)WebRequest.Create(item.Link);
WebResponse _response = _req.GetResponse();

Invoke(new dProgressInit(ProgressInit), new object[] { pbBytes,(Int32)_response.ContentLength });
Invoke(new dProgressValue(ProgressValue), new object[] { pbBytes, 0 });

using (Stream _stream = _response.GetResponseStream())
{
using (FileStream _fs = new FileStream(@"c:\test.txt",FileMode.Create))
{
int _bytesRead = 1;
while (_bytesRead != 0)
{
byte[] buffer = new byte[32768];

_bytesRead = _stream.Read(buffer, 0, buffer.Length);
_fs.Write(buffer, 0, _bytesRead);

buffer = null;

Invoke(new dProgressValue(ProgressValue), new object[] { pbBytes, pbBytes.Value + _bytesRead });
Invoke(new dClose(pbBytes.Refresh));
}
}
}
}[/CSHARP]
[I]Особое внимание в этом способе загрузки следует уделить размеру буфера (byte[] buffer = new byte[32768]; ) т.к. это влияет на скорость и качество загрузки. Чем меньше буфер, тем необходимо потратить больше ресурсов (времени) на запрос следующей части, но меньше вероятность сбоя подключения и соответственно наоборот. [/I]
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru