С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 19.07.2012
Сообщений: 23

WebClient и progressBar

19.07.2012, 18:51. Показов 3273. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru