![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контроль копирование файла с сайта на диск. [D7, WinXP]
kyn66 © (2005-11-02 16:51:00)Уважаемые Мастера! Хочу подвесить ProgressBar для копирования файла с сайта, а он чегость дергается как ненормальный. Вот мой код, в чем там ошибка?
hSession := InternetOpen('Proga', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
hURL := InternetOpenURL(hSession,PChar(UrlName),nil, 0, 0, 0);
InternetQueryDataAvailable(hURL, SumSize, 0, 0);
PB1.Min := 0;
PB1.Max := SumSize;
Repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
InternetQueryDataAvailable(hURL, SumSize, 0, 0);
PB1.Position := PB1.Max - SumSize;
BlockWrite(f, Buffer, BufferLen);
Application. Processmessages;
until
(BufferLen = 0) or
kyn66 (2005-11-02 17:46:00) [1]Значит как это прикрутить, можно конкретнее? Протокол HTTP
DiamondShark (2005-11-02 17:42:00) [2]
> за легбез
ликбез.
ЛИКвидация БЕЗграмотности.
DiamondShark (2005-11-02 17:39:00) [3]
> Именно для скачивания из Интернета.
Какой протокол?
Для HTTP размер файла содержится в http-заголовке Content-Length
Значение этого заголовка можно получить функцией HttpQueryInfo с параметром HTTP_QUERY_CONTENT_LENGTH.
Правда, http-сервер не обязан возвращать этот заголовок ;)
Для FTP размер файла определяется функцией FtpGetFileSize.
В вызове
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
действительное количество прочитанных этим вызовом байт возвращается в переменной BufferLen.
kyn66 (2005-11-02 17:20:00) [4]Спасибо за легбез, но а как должно быть правильно? Примерец мона? Именно для скачивания из Интернета.
DiamondShark (2005-11-02 17:14:00) [5]А почитать, что возвращает функция InternetQueryDataAvailable?
This function returns the number of bytes of data that are available to be read immediately by a subsequent call to InternetReadFile.
Эта функция возвращает количество байт данных, которые доступны для немедленного считывания последующим вызовом InternetReadFile.
Вот этот кусок
> InternetQueryDataAvailable(hURL, SumSize, 0, 0);
> PB1.Min := 0;
> PB1.Max := SumSize;
это ни разу не размер файла.
вот этот кусок
> InternetQueryDataAvailable(hURL, SumSize, 0, 0);
> PB1.Position := PB1.Max - SumSize;
это ни разу не загруженное количество байт.