1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23

WebClient и progressBar

19.07.2012, 18:51. Показов 3286. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код обработки нажатия на кнопку, который качает определённый файл (Opera к примеру):

C++
1
2
3
String^ file = "Opera_inst.exe";
WebClient^ myWebClient = gcnew WebClient;
myWebClient->DownloadFileAsync(gcnew Uri("http://clck.yandex.ru/redir/dtype=stred/pid=325/cid=70221/path=Opera.win64.serp.kold/*http://download.yandex.ru/opera/Opera_setup_x64.exe"),file);
Помогите добавить к нему прогрессБар по состоянию закачки. Использую Windows Forms.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.07.2012, 18:51
Ответы с готовыми решениями:

WebClient и ProgressBar
У меня есть код: static void dlf(string uri2, string file, string name) { string uri; uri =...

Ссылки для скачивания с помощью WebClient.DownloadFile и WebClient.DownloadFileAsync
Ссылки какие должны быть, для скачивания webClient.DownloadFile и webClient.DownloadFileAsync Не пойму какие ссылки должны быть чтоб...

Кеширование результата работы Webclient.DownloadStringAsync() (Windows Phone 8 Webclient)
Всем привет. Приложение для Windows Phone 8. Запускаю под дебагом. Обращаюсь на локальный сервер через...

19
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 00:46
Код не мой, проверял работает
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
        // Occurs when an asynchronous file download operation completes.
void Form1::_DownloadFileCompleted(System::Object ^sender, AsyncCompletedEventArgs ^e)
{
    // File download completed
    button1->Enabled = Enabled;
    MessageBox::Show("Download completed");
}
 
// Occurs when an asynchronous download operation successfully transfers some or all of the data.
void Form1::_DownloadProgressChanged(System::Object ^sender, System::Net::DownloadProgressChangedEventArgs ^e)
{
    // Update progress bar
    progressBar1->Value = e->ProgressPercentage;
}
 
 
// download button click event
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    // Disable download button to avoid clicking again while downloading the file
    button1->Enabled = false;
 
    // Downloads, to a local file, the resource with the specified URI. 
    // This method does not block the calling thread.
    System::Net::WebClient ^_WebClient = gcnew System::Net::WebClient();
    _WebClient->DownloadFileCompleted += gcnew AsyncCompletedEventHandler(this, &Form1::_DownloadFileCompleted);
    _WebClient->DownloadProgressChanged += gcnew System::Net::DownloadProgressChangedEventHandler(this, &Form1::_DownloadProgressChanged);
    _WebClient->DownloadFileAsync(gcnew Uri("http://clck.yandex.ru/redir/dtype=stred/pid=325/cid=70221/path=Opera.win64.serp.kold/*http://download.yandex.ru/opera/Opera_setup_x64.exe"), "Opera_inst.exe");
}
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 12:41  [ТС]
Спасибо большое, заработало, но теперь мне нужно сделать так, чтобы при завершении закачки запускалось то, что скачал. Помогите или дайте направление, что нужно использовать.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 15:44
Тут бы гору проверок написать,
проверить какой там EXE получился. Пока ничего получше
не придумал :

после этих строк

C++
1
2
          button1->Enabled = Enabled;
          MessageBox::Show("Download completed");
добавляем

C++
1
2
3
    if (System::IO::File::Exists("Opera_inst.exe")) //если файл есть  
    
        System::Diagnostics::Process::Start("Opera_inst.exe"); // тогда запустить
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 17:15  [ТС]
Так всё работает, и самый последний вопрос, как мне сделать так, чтобы по нажатию клавиши, программа которую я написал (файл .ехе) удалялась?

Добавлено через 3 минуты
И если не сложно, я смотрю вы разбираетесь в этом, посоветуйте книгу по С++.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 18:15
Цитата Сообщение от mostransformer Посмотреть сообщение
чтобы по нажатию клавиши, программа которую я написал (файл .ехе) удалялась?
Значит удалить Opera ?

C++
1
2
3
4
5
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
 
                // if (System::IO::File::Exists("Opera_inst.exe")) //если файл есть  <-- проверка не нужна 
                 System::IO::File::Delete("Opera_inst.exe");
             }
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 18:20  [ТС]
Да нееет, саму программу над которой мы сейчас работаем. По моему это очень сложно осуществить, так как программа врядли может удалить включенный процесс, тем более свой.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 18:21
Цитата Сообщение от mostransformer Посмотреть сообщение
посоветуйте книгу по С++
Нравится :Николас А.Солтер Скот Дж.Клепер
"С++ для профессионалов " хоть и называется для профессионалов,
но как то более менее понятно написано

Добавлено через 1 минуту
C++
1
2
3
4
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
 
             this->Close();
         }
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 18:22  [ТС]
Да нет же, именно удалять файл ехе.
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 18:24
Цитата Сообщение от mostransformer Посмотреть сообщение
удалить включенный процесс
Если приложение запущено то нет .Не удалит
0
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 18:25  [ТС]
И это вообще никак нельзя осуществить?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
20.07.2012, 18:34
Можно но я не пока не знаю .

Добавлено через 56 секунд
mostransformer, если что найду напишу
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
20.07.2012, 19:16  [ТС]
Есть у меня идейка, которую собственно я исполнить не могу. Создаём .bat файл, пишем в него удаление нашей программы, но с задержкой в 1 секунду после запуска, затем запускаем .bat, и закрываем нашу программу. .bat ждёт 1 секунду чтоб наша программа закрылась, и удаляет её. А вот что делать с .bat я не знаю .
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.07.2012, 08:16
mostransformer, если EXE не загрузился или он с ошибкой то при инсталяции
прога вылетает с иключением поэтому нужна проверка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 // File download completed
    button1->Enabled = Enabled;
    MessageBox::Show("Download completed");
 
    if (System::IO::File::Exists("Opera_inst.exe")) //если файл есть  
    
         try
        {
             System::Diagnostics::Process::Start("Opera_inst.exe") ;  //  инсталяция 
        }
 
        catch ( Exception^  ) // ЕСЛИ НЕЛЬЗЯ УСТАНОВИТЬ 
        {
              MessageBox::Show("Installation Error!","Error",        //< --  ОШИБКА ИНСТАЛЯЦИИ 
                                MessageBoxButtons::OK, MessageBoxIcon::Error);
        }
ну и код самоуничтожения
C++
1
2
#include <Windows.h>
#include <stdio.h>
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
        void del()
        {
            
            const char AppName[] = "C:\\Users\\exeName";// <-- СЮДА ПИШЕМ ПУТЬ К  .EXE
 
            FILE *f ;
 
            if ( ! ( f = fopen( "selfdel.bat", "w+" ) ) )
 
                MessageBox::Show("Can't open file .bat for output!","Error",
                                MessageBoxButtons::OK, MessageBoxIcon::Error);
            else
 
            {
                fprintf( f,
 
                         ":dc\n"
 
                         "del %s.exe\n"
 
                         "if exist %s.exe goto dc\n"
 
                         "del selfdel.bat",  AppName,  AppName 
 
                       );
 
            fclose( f );
 
            WinExec( "selfdel.bat", FALSE );
            }
        }
 
 
private: System::Void button3_Click(System::Object^  sender, System::EventArgs^  e) 
         {           
             del();
        
             this->Close();
         }
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
21.07.2012, 12:49  [ТС]
А можно ли сделать так, чтобы и путь и имя ехе он сам определял?

Добавлено через 1 час 36 минут
Хмм, странно, но у меня не работает код удаления файла.
Запускать запускает, но выводит предупреждение и при нажатии на кнопку просто закрывает программу:
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Путь к файлу ввёл "D:\\123.exe"
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.07.2012, 13:24
Цитата Сообщение от mostransformer Посмотреть сообщение
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
Это не ошибка . MSVS навязывает использовать безопасные функции ( fopen_s )


Цитата Сообщение от mostransformer Посмотреть сообщение
А можно ли сделать так, чтобы и путь и имя ехе он сам определял?
Имя все равно необходимо будет вводить ( можно ведь через текстбокс).
Да и зачем имя ? Имя не меняется, а вот путь - неизвестно откуда программа
будет запускаться . (методы - StartupPath, GetFullPath и др.)



Цитата Сообщение от mostransformer Посмотреть сообщение
Хмм, странно, но у меня не работает код удаления файла.
вот ищет путь самостоятельно .Имя свое впишите и двойной слэш впереди

C++
1
2
3
4
5
6
7
8
9
10
void del()
        {
            // ИМЯ 
            System::String^ exename = "\\exeName"; <----- ИМЯ СВОЕ ВПИСАТЬ 
            // ПУТЬ 
            const char *AppName = (char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi( Application::StartupPath + exeName ).ToPointer();// ПУТЬ К  .EXE
 
            FILE *f ;
 
            if ( ! ( f = fopen( "selfdel.bat", "w+" ) ) )
Цитата Сообщение от mostransformer Посмотреть сообщение
Путь к файлу ввёл "D:\\123.exe"
mostransformer, найди .EXE в папках и его запусти двойным кликом

У меня все работает , удаляется .EXE и батник

Добавлено через 17 минут
Вот по другому функцию написал, все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private:    
 System::Void del(){
 
        String^ appname = Application::StartupPath + "\\exeName";    
        System::IO::StreamWriter^ sw = System::IO::File::CreateText( "selfdel.bat" );
 
            try
                {
                    sw->WriteLine( ":dc\n del "
                                + appname +  ".exe\nif exist "
                                +  appname + ".exe goto dc\n del selfdel.bat" );
                }
 
            finally
 
                {
                     if ( sw )
                         delete (IDisposable^)(sw);
                }
             
         WinExec( "selfdel.bat", FALSE );
         }
1
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.07.2012, 13:45
mostransformer, вот .EXE у себя проверьте
Вложения
Тип файла: zip ForumGraph.zip (20.2 Кб, 13 просмотров)
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
21.07.2012, 13:55  [ТС]
Ни в какую не хочет удаляться. Имя пишу правильно. Проверил, батник он и создаёт и удаляет. this->Close() на кнопке работает. А вот удалять не хочет.

Добавлено через 4 минуты
А ваш файл он удалил...
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
21.07.2012, 13:59
mostransformer, ну так это только из IDE создается EXE .

Написал же
Цитата Сообщение от MrCold Посмотреть сообщение
mostransformer, найди .EXE в папках и его запусти двойным кликом
Где он создается ? в папке Release ?
Найди
Запусти двойным кликом , жми DELETE
и он удалится
1
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23
21.07.2012, 14:07  [ТС]
Я так и делаю

Добавлено через 16 секунд
Не настолько дуб в С++

Добавлено через 1 минуту
Хмм, возможно я знаю в чём ошибка...

Добавлено через 1 минуту
Даааа, батник не распознаёт русские символы в пути к файлу... теперь всё работает. Извиняюсь за свой косяк.

Добавлено через 3 минуты
Всё, готово, спасибо за ваши старания в помощи мне. Очень благодарен.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2012, 14:07
Помогаю со студенческими работами здесь

Скачивание файла WebClient с отображением процентов загрузки файла, progressBar, скоростью загрузки файла
Приветствую! Нужна Ваша помощь... Имеется такой кодик, слепленный из готовых примеров System.Net.WebClient webClient =...

WebClient.DownloadFileAsync и WebClient.DownloadFile
Если правильно понимаю, то WebClient.DownloadFileAsync и WebClient.DownloadFile это 2 разных метода. В интернете большая часть литературы...

Консольный progressbar или progressbar в TMemo
Здравствуйте. Хочу спросить ради интереса как создать вот такой ProgressBar но с указанием своих сиволов в консоли и в...

WebClient
Доброго всем времени суток! Помогите пожалуйста. Есть винформ приложение которое парсит html код определённого сайта, достаёт оттуда...

WebClient.DownloadFileAsync()
Не определяется размер файла, а, соответственно, и процент загрузки. Вроде по гайду переписал метод GetWebRequest класса WebClient, однако...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru