Дозакачка файла, если не докачался WebClient, DownloadFileAsync - C#
Формулировка задачи:
Здравствуйте!
Проблема в том, что при скачивании файла
modpack.zip
, он у меня скачивается не полностью и программа приступает к выполнению методаDownloadFileCompleted
, а этот метод должен срабатывать только когда zip архив полностью скачался. Как мне сделать дозакачку файла, если не дозакачался он еще? У моего знакомого скорость инета высокая (30-50 мбит), так вот у него архив нормально скачивается (zip) быстро и нормально распаковывается, а у меня скорость 6-8 мбит у меня вот не дозакачивается.wc.DownloadFileAsync(new Uri(url), save_path + name); //скачиваем zip архив (500мб)
wc.DownloadProgressChanged += (s, d) =>
{
progressBar1.Value = d.ProgressPercentage; //при скачивании будет изменяться ProgressBar
};
wc.DownloadFileCompleted += (s, d) =>
{
string zipPath = save_path + @"\modpack.zip"; // где находится наш скачанный zip архив
string extractPath = save_path + @"\multiplayer_c\custom"; // куда распаковать скачанный zip архив
DirectoryInfo directoryinfo = new DirectoryInfo(extractPath); //директорию куда следует распаковать
if (directoryinfo.Exists) directoryinfo.Delete(true); // если вдруг директория куда следует распаковать что-то содержит, то удалить ВСЁ и распаковать
ZipFile.ExtractToDirectory(zipPath, extractPath); // сам метод распаковки
MessageBox.Show("МодПак установился успешно!", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Warning);
};Решение задачи: «Дозакачка файла, если не докачался WebClient, DownloadFileAsync»
textual
Листинг программы
String version = "4";
// Объект запроса
HttpWebRequest rew = (HttpWebRequest)WebRequest.Create("https://artifactgg.ru/download/versionlauncher.txt");
// Отправить запрос и получить ответ
try
{
using (HttpWebResponse resp = (HttpWebResponse)rew.GetResponse())
{
Stream str = resp.GetResponseStream();
int ch;
String message = "";
for (int i = 1; ; i++)
{
ch = str.ReadByte();
if (ch == -1) break;
message += (char)ch;
}
if (message == version)
{
InitializeComponent();
}
else if (message != version)
{
InitializeComponent();
label1.Visible = false;
label2.Visible = false;
label3.Visible = false;
button1.Visible = false;
progressBar1.Visible = false;
label4.Visible = true;
linkLabel1.Visible = true;
button2.Visible = false;
label5.Visible = false;
}
str.Flush();
str.Close();
rew.Abort();
resp.Close();
}
}