Отслеживание прогресса загрузки

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Отслеживание прогресса загрузки

Сообщение Tarik » 07.07.2004 (Ср) 19:50

Всем привет! Давно я что-то вопросов не задавал :) На этот раз меня интересует вот что. Я качаю файл с FTP посредством ф-ции FtpGetFile. Файл довольно объёмный (~30 метров), поэтому появилась мысль выводить прогресс загрузки (типа "скачано n байт из m байт"). Однако вышеозначенная ф-ция наглухо блокирует всю программу, соответсвенно нет никакой возможности производить какие-либо действия до её (ф-ции то есть) завершения :( Что посоветуете?

P. S. Блин, пора заканчивать с Эплманом, а то нехорошие мысли о многопоточности в голову лезут :shock:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Keen
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 25.04.2004 (Вс) 10:45
Откуда: Россия => Москва

Re: Отслеживание прогресса загрузки

Сообщение Keen » 07.07.2004 (Ср) 22:32

Tarik писал(а):Всем привет! Давно я что-то вопросов не задавал :) На этот раз меня интересует вот что. Я качаю файл с FTP посредством ф-ции FtpGetFile. Файл довольно объёмный (~30 метров), поэтому появилась мысль выводить прогресс загрузки (типа "скачано n байт из m байт"). Однако вышеозначенная ф-ция наглухо блокирует всю программу, соответсвенно нет никакой возможности производить какие-либо действия до её (ф-ции то есть) завершения :( Что посоветуете?

P. S. Блин, пора заканчивать с Эплманом, а то нехорошие мысли о многопоточности в голову лезут :shock:


А каким образом ты качаешь файл? Можно через Internet Transfer Control и принимать байты вручную. Тогда должно быть все нормально. Тем более есть DoEvents...

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 08.07.2004 (Чт) 9:10

Качаю APIшкой FTPgetFile. Вот полный код
Код: Выделить всё
Dim hConnection As Long, hOpen As Long
Dim pData As WIN32_FIND_DATA, hFind As Long, lRet As Long
hOpen = InternetOpen("Revival", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hConnection = InternetConnect(hOpen, downloadServer, INTERNET_DEFAULT_FTP_PORT, "anonymous", "email@not.set", INTERNET_SERVICE_FTP, IIf(PassiveConnection, INTERNET_FLAG_PASSIVE, 0), 0)
FtpSetCurrentDirectory hConnection, cwd
pData.cFileName = String(MAX_PATH, 0)
hFind = FtpFindFirstFile(hConnection, fileName, pData, 0, 0) 'Ищется нужный файл...
InternetCloseHandle hFind
pb.Visible = True
pb.Max = pData.nFileSizeLow + 1 '...узнаётся его размер и присваивается св-ву Max ProgressBar'а
FtpGetFile hConnection, fileName, App.Path & "\" & fileName, False, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0 'Вот этим-то я и качаю файл
InternetCloseHandle hConnection
InternetCloseHandle hOpen
Call Shell(App.Path & "\" & fileName, vbNormalFocus)

С Internet Transfer Controls попробую, но всё же хотелось бы без контролов... А хотя всё равно, эти API вызываются из того же wininet.dll... Короче, попробую, а если будут вопросы - напишу.
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 08.07.2004 (Чт) 16:10

Вроде разобрался, только он глюкает иногда :-( А чем правильнее закрывать сессию: "CLOSE" или "QUIT"?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

pepsi_man[Mir-2]
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 03.06.2004 (Чт) 21:21
Откуда: Семипалатинск

Сообщение pepsi_man[Mir-2] » 10.07.2004 (Сб) 20:31

Привет!

пример:

в Линуксе когда я создаю фтп ссесию а потом пишу команду "CLOSE", то я закрываю текущую ссесию, а если пишу "QUIT", то вообще выхожу из фтп.

Так что суди сам что тебе выгодней хотя по сути это одно и тоже!
С уважением pepsi_man[Mir-2]!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 18

    TopList