| 
| 
 | Вопрос # 2 466/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!У меня вопрос: как можно узнать размер файла, хранящегося в интернете?
 
 P.S: нашел в гугле пару функций, но обе они возвращяют значение 2048.
 
|  |   Вопрос задал: IlluminatI (статус: 2-ой класс)Вопрос отправлен: 27 февраля 2009, 18:26
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Ученый Здравствуйте, IlluminatI! Порылся в хелпах и нашел такой код:
 
 //Как узнать размер файла в интернете?
uses wininet;
...
function GetUrlSize(const URL:string):integer;//результат в байтах
var
hSession,hFile:hInternet;
dwBuffer:array[1..20] of char;
dwBufferLen,dwIndex:DWORD;
begin
Result:=0;
hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
if Assigned(hSession) then begin
hFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
dwIndex:=0;
dwBufferLen:=20;
if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then
Result:=StrToInt(StrPas(@dwBuffer));
if Assigned(hFile) then InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
end;Очень надеюсь, что мой ответ хоть чем-нибудь поможет вам:)
 
|  | Ответ отправил: Ученый (статус: 8-ой класс)Время отправки: 1 марта 2009, 09:20
 
 |  
 Мини-форум вопросаВсего сообщений: 8; последнее сообщение — 1 марта 2009, 10:31; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 27 февраля 2009, 18:39 [#1]:Послать HEAD запрос.  IdHttp и synapse это умеют. Но сервер не обязан присылать размер. Это не есть обязательное поле. Поэтому, в некоторых случаях размер будет неизвестным. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | IlluminatI (статус: 2-ой класс), 27 февраля 2009, 18:41 [#2]:а можно поподробней как это сделать? просто я эти названия первый раз слышу, в 10кл их не проходят)))
 |  
|   | Вадим К (статус: Академик), 27 февраля 2009, 18:56 [#3]:м.... а сложно догадаться написать строку idhttp1.head... ну и далее по контектсту.
 Эта строка заберёт с сервера только заголовки. а так она идентична get запросу, которым бы скорее всего качали файл. Ну а после выполнения запроса, можно проверять поля компонента idHttp. там размер и запрятался. А даже и дата создания файла и другое, если сервер отдает корректно.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:16 [#4]:хорошо, попробую, какой модуль нужно для этого подключать? |  
|   | Вадим К (статус: Академик), 27 февраля 2009, 19:18 [#5]:намекаю тонко. поставить на форму компонент TIdHttp с пакета инди.... Галочка "подтверждения прочтения" - вселенское зло. |  
|   | IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:29 [#6]:Ок =) |  
|   | IlluminatI (статус: 2-ой класс), 27 февраля 2009, 20:05 [#7]:еще вопрос)) в каком поле искать данные и какого они типа? |  
|   | Вадим К (статус: Академик), 1 марта 2009, 10:31 [#8]:Ну, до сих пор никак? 
   IdHTTP1.Head('http://somesite.ua');
  ShowMessage(inttostr(IdHTTP1.Response.ContentLength));Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |