Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62

IdFTP & ProgressBar бар стоит на нуле!

20.07.2013, 15:32. Показов 3665. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Написал программу для скачки файлов с фтп серверов хочу чтобы отображался процесс скачки через ProgressBar2 написал следующий код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm6::IdFTP1WorkBegin(TObject *Sender,
      TWorkMode AWorkMode, const int AWorkCountMax)
{
 
ProgressBar2->Position = 0;
ProgressBar2->Max = AWorkCountMax;
 
}
//---------------------------------------------------------------------------
void __fastcall TForm6::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
{
 
ProgressBar2->Position = AWorkCount;
Application->ProcessMessages();
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm6::IdFTP1WorkEnd(TObject *Sender, TWorkMode AWorkMode)
{
 
MessageBox(0,"Download complete!", "Completed!", MB_OK );
Искал по форумам ничего не нашел, закачка стартует но ProgressBar2 стоит все время на нуле и только в конце выдается сообщените "Download complete!", "Completed!" и ProgressBar2 все также остается стоять на нуле


Что делать?

За ранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.07.2013, 15:32
Ответы с готовыми решениями:

IdFTP + ProgressBar
Здравствуйте, помогите сделать чтобы при закачке файлов с FTP сервера, в ProgressBar'е был статус его докачки. Знаю что есть события onWork...

IdFTP, отображать процесс копирования в ProgressBar-е
подскажите как мне отобразить процесс копирования в прогресс баре? нужно как-то узнать сколько на данный момент скопировано байт, как это...

query='SELECT * FROM resume WHERE ' & ''' & RecSet('place')& ''' & '=' & '''& s_loc &''' & - что не так?
упростил для краткости запрос. в чем ошибка? RecSet - это коннекшн. query='SELECT * FROM resume WHERE ' & ''' &...

17
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 15:34
Убери
Цитата Сообщение от methanoljj Посмотреть сообщение
C++
1
Application->ProcessMessages();
Да и обычно Indy используют в потоках.

Кроме того если файл слишком мал прогресс может быть незаметен.
0
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 15:47  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Убери


Да и обычно Indy используют в потоках.

Кроме того если файл слишком мал прогресс может быть незаметен.
Все тоже самое, файл весит 22мб

Добавлено через 6 минут
я для скачки и использую IdFTP.(Indy Clients)

Опыта у меня большого нету в сфере Indy Буду рад если что нибудь подскажете.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
20.07.2013, 15:49
C++
1
ProgressBar2->Max = AWorkCountMax;
в обработчике OnWorkBegin - это бомба замедленного действия. Интернет завален темами "onworkbegin AWorkCountMax always returns 0". Сначала получай размер файла, вызывая Size() для нужного файла, причем это должно делаться не в OnWorkBegin!!! Назначаешь полученный размер в ProgressBar.Max, и только потом запускаешь процесс копирования через IdFtp1.Get()...
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 15:50
Попробуй больше файл скачать и указывать мод

C++
1
2
3
4
5
if( AWorkMode==TWorkMode::wmRead)
 {
    ProgressBar1->Position= 0;
    ProgressBar1->Max = AWorkCountMax; // размер файла
 }
0
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 15:53  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
C++
1
ProgressBar2->Max = AWorkCountMax;
в обработчике OnWorkBegin - это бомба замедленного действия. Интернет завален темами "onworkbegin AWorkCountMax always returns 0". Сначала получай размер файла, вызывая Size() для нужного файла, причем это должно делаться не в OnWorkBegin!!! Назначаешь полученный размер в ProgressBar.Max, и только потом запускаешь процесс копирования через IdFtp1.Get()...
уже слышал, переделывал тоже не работает
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 15:55
Цитата Сообщение от UI Посмотреть сообщение
в обработчике OnWorkBegin - это бомба замедленного действия.
Ну в других компонентах Indy вроде нормально работает...
0
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 15:56  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Попробуй больше файл скачать и указывать мод

C++
1
2
3
4
5
if( AWorkMode==TWorkMode::wmRead)
 {
    ProgressBar1->Position= 0;
    ProgressBar1->Max = AWorkCountMax; // размер файла
 }
[C++ Error] Unit6.cpp(46): E2090 Qualifier 'TWorkMode' is not a class or namespace name
[C++ Error] Unit6.cpp(46): E2377 If statement missing )

ошибки

Добавлено через 59 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
Ну в других компонентах Indy вроде нормально работает...
согласен, в IdHTTP работает без проблем но вот с IdFTP проблемы.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 16:01
Вероятно
C++
1
if( AWorkMode == wmRead)
- зависит от версии Builder/Indy

Добавлено через 1 минуту
Цитата Сообщение от methanoljj Посмотреть сообщение
согласен, в IdHTTP работает без проблем но вот с IdFTP проблемы.
Для FTP есть вроде специальная команда для определения размера файла.

Добавлено через 1 минуту
Блин ...
Цитата Сообщение от methanoljj Посмотреть сообщение
C++
1
2
3
4
void __fastcall TForm6::IdFTP1WorkEnd(TObject *Sender, TWorkMode AWorkMode) 
{ 
MessageBox(0,"Download complete!", "Completed!", MB_OK );
}
Уберите это из обработчика, нельзя такое пихать в обработчик
0
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 16:06  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Вероятно
C++
1
if( AWorkMode == wmRead)
- зависит от версии Builder/Indy

Добавлено через 1 минуту

Для FTP есть вроде специальная команда для определения размера файла.

Добавлено через 1 минуту
Блин ...

Уберите это из обработчика, нельзя такое пихать в обработчик
Сделал все так как вы сказали но все равно не работает, теперь форма на какой кнопка закачки и ProgressBar зависла но файл закачивается.

Да есть это IdFtp.Size()
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 16:10
Цитата Сообщение от methanoljj Посмотреть сообщение
теперь форма на какой кнопка закачки и ProgressBar зависла но файл закачивается.
Ну так и должно быть- форма висит, если потоки не используешь ...

А прогресс двигается ?
0
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 16:15  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так и должно быть- форма висит, если потоки не используешь ...

А прогресс двигается ?
форма виснет на всегда, вот по такому коду я стартую программу:

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm6::Button1Click(TObject *Sender)
{
 
IdFTP1->Host = "ftp.*************";
IdFTP1->User = "*************";
IdFTP1->Password = "*************";
IdFTP1->Connect();
MkDir("C://MSfUaD/");
MkDir("C://MSfUaD/Server");
IdFTP1->Get("/public_html/Films.rar", "C:/MSfUaD/Server/Films.rar", true);
 
}
//---------------------------------------------------------------------------
void __fastcall TForm6::FormCloseQuery(TObject *Sender, bool &CanClose)
{
Form2->Show();
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm6::IdFTP1WorkBegin(TObject *Sender,
      TWorkMode AWorkMode, const int AWorkCountMax)
{
 
if( AWorkMode == wmRead) {
    ProgressBar2->Position= 0;
    ProgressBar2->Max = AWorkCountMax; // ?????? ?????
 }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm6::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
{
 
ProgressBar2->Position = AWorkCount;
 
}
//---------------------------------------------------------------------------
void __fastcall TForm6::IdFTP1WorkEnd(TObject *Sender, TWorkMode AWorkMode)
{
//nothing
}
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 16:19
Ну так попробуйте совет UI

Добавлено через 1 минуту
И у вас походу Indy старая...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
20.07.2013, 16:19
Цитата Сообщение от Avazart Посмотреть сообщение
Ну в других компонентах Indy вроде нормально работает...
Ключевое слово - выделено. В других иногда работает, в IdFTP не работает практически никогда.
Цитата Сообщение от methanoljj Посмотреть сообщение
уже слышал, переделывал тоже не работает
Кода, как переделывал, я не вижу, телепатор мой сломался от перегрузок.
1
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 16:21
Цитата Сообщение от UI Посмотреть сообщение
Ключевое слово - выделено. В других иногда работает, в IdFTP не работает практически никогда.
Ну я не замечал багов в IdHTTP и IdIMAP4/IdPOP3
1
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 16:38  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Ключевое слово - выделено. В других иногда работает, в IdFTP не работает практически никогда.Кода, как переделывал, я не вижу, телепатор мой сломался от перегрузок.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm6::IdFTP1Connected(TObject *Sender)
{
if (IdFTP1->Connected() == true){
int a;
a = IdFTP1->Size("/public_html/serverMC.rar");
ProgressBar2->Max = a;
IdFTP1->Get("/public_html/serverMC.rar", "C:/MSfUaD/Server/serverMC.rar", true);
 
 
// ошибка Out of range от Progressbar
 
 }
}
Вот такое

Добавлено через 11 минут
что скажите господа?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.07.2013, 16:42
Может сменить Indy и Builder ?

Добавлено через 2 минуты
Пробуй

C++
1
2
__int64 a = IdFTP1->Size("/public_html/serverMC.rar");
ProgressBar2->Max = a / 1000;
1
 Аватар для methanoljj
0 / 0 / 1
Регистрация: 24.02.2013
Сообщений: 62
20.07.2013, 16:49  [ТС]
все работает сейчас выложу код

Добавлено через 4 минуты
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
#include "Unit6.h"
 
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm6::Button1Click(TObject *Sender)
{
 
//Пишем данные для конекта
IdFTP1->Host = "ftp.************";
IdFTP1->User = "************";
IdFTP1->Password = "************";
//создание дериктории для сохранения
MkDir("C://MSfUaD/");
MkDir("C://MSfUaD/Server");
IdFTP1->Connect();
//запрос из каталога FTP на размер файла
if (IdFTP1->Connected() == true){
int a;
a = IdFTP1->Size("/public_html/Films.rar"); //"/public_html/"папка и "Films.rar" файл
ProgressBar2->Max = a;
}
IdFTP1->Get("/public_html/serverMC.rar", "C:/MSfUaD/Server/serverMC.rar", true); //качаем
IdFTP1->Disconnect();
 
 
}
//---------------------------------------------------------------------------
void __fastcall TForm6::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
{
 
ProgressBar2->Position = AWorkCount;
 
}
//---------------------------------------------------------------------------
Все работает идеально. Всем спасибо за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2013, 16:49
Помогаю со студенческими работами здесь

Стоит ли скрыть сайт бар сайта с рубриками от Гугла с помощью rel=nofolow?
Если на сайте в сайт баре находятся рубрики, страницы которых сами по себе никак не влияют на выдачу, но при этом на них передается...

Timer&ProgressBar
На форме: Timer,ProgressBar,button. Необходимо по нажатию Button запустить процесс в ProgressBar, который будет длиться в течении минуты....

error '80020009' &Icirc;&oslash;&egrave;&aacute;&ecirc;&agrave;. /lalala/profile.asp, line 28
При простейшем и сто раз работавшем скрипте, вылетает ошибка! след. содержания error '80020009' ...

Помогите найти драйвера для pci\ven_8086&DEV_266E&SUBSYS_A002145&REV_05\3&13C0B0C5&0&F2
pci\ven_8086&amp;DEV_266E&amp;SUBSYS_A002145&amp;REV_05\3&amp;13C0B0C5&amp;0&amp;F2 Мультимедиа аудиоконтроллер помогите плз найти...

Мультимедиа контролер PCI\VEN_14F1&DEV_8800&SUBSYS_EA3D14F1&REV_05\4&25700A26&0&3020
Помогите пожалуйста найти драйвер на мультимедиа видеоконтролер ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru