![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как по http узнать размер файла?? [D7, WinXP]
BorH © (2003-08-17 04:16:00)
(продолжение темы " Скачивание файла по HTTP")
Тэкс, прогу я сделал, на ней два ПрогрессБара, один показывает общий прогресс, а второй не пашет, потому как я незнаю как определять размер файла. Желательно с помощью WinInet.
Дмитрий В. Белькевич (2003-08-19 01:32:00) [1]
Для BorH: ищи доки на сайте господина Анатолия Подгородецкого http://www.podgoretsky.com.Там по wininet есть замечательная документация.
BorH (2003-08-19 00:30:00) [2]
2 Дмитрий В. Белькевич ©Ясно. Понял. :-))
2 AllВсё хорошо, но вот только InternetQueryDataAvailable не пашет, вернее пашет, но возвращает вместо размера то 655 то 656... Вот код, который я использую:
var
hSession, hURL: HInternet;
dwFlags, dwContext: DWORD;
begin
hSession := InternetOpen("Mozilla/4.0",
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
//не думаю, чтоб ошибка была из-за непонравившегося серваку агента
hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,0,0);
InternetQueryDataAvailable(hURL,dwordFileSize, {!!!!}
0,0); {!!!!}
а потом в цикле чтение
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen)
и запись в файл...
Обидно, всё пашет, а это - нет!!!
Люди, ПЛИЗ ПОМОГИТЕ!!! время поджимает :-((
BorH (2003-08-18 12:24:00) [3]
2 gedd ©
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,0,0);
Насколько я разобрался, INTERNET_OPEN_TYPE_PRECONFIG указывает брать прокси из реестра.
Полазь по исходникам WinInet. Будет больше ясно.
2 Дмитрий В. Белькевич ©Спасибо конечно, но где ты достал инфу но WinInet? В справке Делфей нет...
gedd (2003-08-18 11:57:00) [4]
А ты как через прокси проходить будешь?
Дмитрий В. Белькевич (2003-08-18 01:49:00) [5]
InternetQueryDataAvailable takes the HINTERNET handle created by InternetOpenUrl, FtpOpenFile, GopherOpenFile, or HttpOpenRequest (after HttpSendRequest has been called on the handle) and returns the number of bytes available. The application should allocate a buffer equal to the number of bytes available +1 for the NULL terminator, and use that buffer with InternetReadFile. This method does not always work because InternetQueryDataAvailable is checking the file size listed in the header and not the actual file. The information in the header file could be outdated or the header file could be missing, since it is not currently required under all standards.
По-моему в описанке WinInet достаточно ясно написано.
Palladin (2003-08-18 00:53:00) [6]
Учти только, сервер не обязан тебе возвращать размер ресурса...
Palladin (2003-08-18 00:44:00) [7]
Вряд ли твоя задача требует идеи.
RTFM
а конкретно
http://helper10.narod.ru/ac0.htm
RFC HTTP
смотри метод HEAD...
+ использование TClientSocket
BorH (2003-08-17 04:24:00) [8]
Я полагаю, надыть спросить сервака о размере...
Вот лог ФлешГета:
Sun Aug 17 02:59:45 2003