![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
В своем проекте я загружаю файл из интернета.
Я использую InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest, InternetReadFile. Подскажите что нужно написать чтобы узнать размер фала который я загружаю (чтобы потом использовать в построении прогресса). И где нужно вписать? Пышу на Bulder 6 Это сообщение отредактировал(а) W_A_S_J_A - 8.4.2008, 09:01 |
|||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: нет Всего: 17 |
для файлов, сервер обычно передает его размер в заголовке (Content-lenght кажись).
если не передает, тогда никак. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: нет Всего: 146 |
Функция вернёт FALSE, если размер неизвестен. |
|||
|
||||
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
Почему-то оно не правильно определяет размер файла. Я написал такой код:
hFile -повертает функция HttpOpenRequest Премер: hFile=HttpOpenRequest(hConnect, //Дескриптор сесії "GET", uri, NULL, NULL, &access, NULL,0); При скатывании файла размером 18356 байт она говорит що файл размером: 2192443704. В чем проблема? Это сообщение отредактировал(а) W_A_S_J_A - 13.4.2008, 19:36 |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
а где вы смотрите размер? уж не в dwSize конечно же?
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
||||
|
||||
Pulse69 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: нет Всего: 10 |
W_A_S_J_A, а HttpQueryInfo точно возвращает TRUE? А какой код возрвщает GetLastError?
Если получается FALSE то, может быть, для данного файла сервер не передаёт поле Conent-Length, а отправляет его по порциям, или после прекращения разрывает соединение. В этом случае, размер узнать никак не получится. --------------------
Ctrl+Alt+Reset |
|||
|
||||
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
Я напысал :
int hFilegf; hFilegf=HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH |HTTP_QUERY_FLAG_NUMBER, &dwSize, &cb, 0); if(hFilegf==NULL) { error = GetLastError(); Form1->Memo1->Lines->Append("TRUE"); Form1->Memo1->Lines->Append(FloatToStr(error)); Form1->Memo1->Lines->Append(FloatToStr(hFilegf)); } else { error = GetLastError(); Form1->Memo1->Lines->Append("FALSE"); Form1->Memo1->Lines->Append(FloatToStr(error)); Form1->Memo1->Lines->Append(FloatToStr(hFilegf)); } повертает true, и значение: error =12150, hFilegf=0. Но OPERA первое чем загрузит его показывает какой его размер, то есть сервер говорит размер файла. Я скачывал логотып цього форума, пробовал и из других сайтов загружать картинки, тот же результат |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
если вы внимательно прочтете приведенный мною фрагмент MSDN, то увидите что смотреть надо не там..... а, в cb. и вообще сверьтесь с MSDN.... -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Pulse69 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: нет Всего: 10 |
Да почему в cb? У W_A_S_J_A, в принципе, всё правильно, кроме нескольких моментов: 1. Почему вы полагаете, что если HttpQueryInfo вернула NULL, это свидетельствует об успешном завершении? В документации ясно сказано, что в случае успеха она возвращает TRUE. 2. Почему в HttpQueryInfo в параметре lpdwIndex вы передаёте ноль? Там должен быть указатель на число типа DWORD, хранящее индекс поля. В общем, вот небольшой кусок кода, который выводит (по крайней мере, у меня) правильное значение.
FileSize после выполнения хранит число 18 356. --------------------
Ctrl+Alt+Reset |
||||
|
|||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: нет Всего: 146 |
dwSize - размер файла. cb - размер исходного и принятого буффера (т.е. &dwSize). Функция HttpQueryInfo универсальная, может возвращать и текст и число. Для текста актуален этот параметр. Для числа - незнаю, но я его указал, хотя в описании флага написано, что число 32 битное. |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
бывает. ступил я... недочитал msdn)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
Приношу извинение, не внимательный, просто у меня там была другая лента (украинской), а я ленился ее переводить, вот и решил написать FALSE, та что-то был задумался и написал TRUE. |
|||
|
||||
W_A_S_J_A |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
В чем проблема?
Оказывается что функция HttpQueryInfo возвращает "0" (пост Дата 14.4.2008, 04:24) Когда пишу код:
Оказывается что она возвращает FALSE (в Label12 ничего не записывается) То есть сервер не говорит размер файла, но Pulse69 загружал тот же файл, и у него все работает хорошо, сервер возвращает размер файла В чем всетаки проблема? |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: нет Всего: 146 |
||||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |