Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

Контроль копирование файла с сайта на диск.   Найти похожие ветки 

 
kyn66 ©   (2005-11-02 16:51) [0]

Уважаемые Мастера! Хочу подвесить 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


 
DiamondShark ©   (2005-11-02 17:14) [1]

А почитать, что возвращает функция 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;

это ни разу не загруженное количество байт.


 
kyn66 ©   (2005-11-02 17:20) [2]

Спасибо за легбез, но а как должно быть правильно? Примерец мона? Именно для скачивания из Интернета.


 
DiamondShark ©   (2005-11-02 17:39) [3]


> Именно для скачивания из Интернета.

Какой протокол?

Для HTTP размер файла содержится в http-заголовке Content-Length
Значение этого заголовка можно получить функцией HttpQueryInfo с параметром HTTP_QUERY_CONTENT_LENGTH.

Правда, http-сервер не обязан возвращать этот заголовок ;)

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

В вызове
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
действительное количество прочитанных этим вызовом байт возвращается в переменной BufferLen.


 
DiamondShark ©   (2005-11-02 17:42) [4]


> за легбез

ликбез.
ЛИКвидация БЕЗграмотности.


 
kyn66 ©   (2005-11-02 17:46) [5]

Значит как это прикрутить, можно конкретнее? Протокол HTTP



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
9-1120044328
Not_Local
2005-06-29 15:25
2005.11.20
Видео


2-1130806936
Живописец
2005-11-01 04:02
2005.11.20
Как нарисовать на Delphi дерево ?


11-1111951017
DeimosX7
2005-03-27 23:16
2005.11.20
проблема с передачей параметров


3-1128687489
alfa_star
2005-10-07 16:18
2005.11.20
E.Message под Linux


14-1130564953
Irmantukas
2005-10-29 09:49
2005.11.20
Bluetooth