Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 11:05   #1
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
Вопрос

Привет всем программистам!
У меня такая вот незадача:
используя InDy узнаю размер файла
Код:
  fSize:=HTTP.Response.ContentLength;
но с файлами боле 2147468648 байт возвращаймое значение отрицательное. Сумничал следующим образом
Код:
 fSize:=HTTP.Response.ContentLength;
  if (fsize < 0) then fSize := 4294937296+fSize;
Все заработало, но... до заветной цифры 4294937296.
Если файл большего размера, например 4600000000, то функция выдает
305062704 (4600000000 - 4294937296 = 305062704 )
Как тут быть?

Смотрел следующие ссылки на этом форуме...
Определить размер файла перед скачиванием
Размер скачиваемого файла
Как узнать размер файла имея его URL
...понял WinInet не для меня )))

Начал ковырять исходники InDy и вот что выяснил:
HTTP.Response.ContentLength заполняется из строки "Content-Length" http заголовка и читает как строку, потом конвертит в Integer - по этому и размер больший не покажет... Решение проблемы вижу в самостоятельном изучении заголовка, но как его получить до обработки InDy???
Header из себя представляет набор строк типа:
Код:
HTTP/1.1 200 OK
Date: Fri, 20 Oct 2006 09:31:16 GMT
Server: Apache/1.3.37 (Unix) FrontPage/5.0.2.2623 PHP/4.4.4 with Suhosin-Patch mod_ssl/2.8.28 OpenSSL/0.9.7d-p1
Last-Modified: Thu, 12 Oct 2006 15:07:41 GMT
ETag: "61a0dc-54779-452e5a3d"
Accept-Ranges: bytes
Content-Length: 345977
Connection: close
мож кто подскажет как его достать то?...

Последний раз редактировалось Stilet; 27.11.2009 в 17:21.
Asteroid вне форума Ответить с цитированием
Старый 27.11.2009, 17:02   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
fSize:=HTTP.Response.ContentLength;

но с файлами боле 2147468648 байт возвращаймое значение отрицательное. Сумничал следующим образом
Код:


fSize:=HTTP.Response.ContentLength;
if (fsize < 0) then fSize := 4294937296+fSize;
А если так?:
Код:
Var GlobSize: LongInt;
...
if (fsize < 0) then GlobSize := 4294937296+fSize Else GlobSize := fSize;
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 27.11.2009, 17:18   #3
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
А если так?:
Код:
Var GlobSize: LongInt;
...
if (fsize < 0) then GlobSize := 4294937296+fSize Else GlobSize := fSize;
Не получиться.
fSize и так обьявлена как int64
проблема в том что fSize пишеться из HTTP.Response.ContentLength, который типа integer (то есть более 4294937296 быть не может) и если файл больше 4 гб, то возвращает его размер -4 гб (напр. если 4,3 гб, то скажет 300мб и т.д.)
Asteroid вне форума Ответить с цитированием
Старый 27.11.2009, 18:11   #4
Asteroid
Пользователь
 
Аватар для Asteroid
 
Регистрация: 08.09.2008
Сообщений: 29
По умолчанию

Подскажите как можно прочитать http заголавок (header) ... ???

Последний раз редактировалось Asteroid; 27.11.2009 в 18:17.
Asteroid вне форума Ответить с цитированием
Старый 27.11.2009, 19:34   #5
Css
Пользователь
 
Аватар для Css
 
Регистрация: 19.11.2009
Сообщений: 13
По умолчанию

Цитата:
Подскажите как можно прочитать http заголавок (header) ... ???
Да вроде так и читают...)
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
IdHTTP1.Head('http://www.programmersforum.ru/image.php?u=21166&dateline=1220988991');
With IdHTTP1.Response Do
   Label1.Caption:=ContentType+#13#10+IntToStr(ContentLength);
end;
Цитата:
но с файлами боле 2147468648 байт возвращаймое значение отрицательное.
Какой кошмар... Где ж вы такие файлы-то нашли? о_О
Долой готовые компоненты! Учите «Win32API»!

Последний раз редактировалось Css; 27.11.2009 в 19:41.
Css вне форума Ответить с цитированием
Старый 27.11.2009, 20:56   #6
Voody
Форумчанин
 
Регистрация: 22.06.2009
Сообщений: 310
По умолчанию

Заголовки: idHttp1.Response.RawHeaders.GetText ;
Voody вне форума Ответить с цитированием
Старый 30.11.2009, 15:22   #7
Usov
Форумчанин
 
Аватар для Usov
 
Регистрация: 29.09.2009
Сообщений: 228
По умолчанию

если версия инди 9 то скорее все с int64 будут проблемы, переходите на более новую версию
Usov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
узнать размер картинки cooperOk JavaScript, Ajax 6 15.11.2009 15:36
Как програмно узнать размер файла? Дима я Общие вопросы C/C++ 3 09.10.2009 21:37
Как узнать размер файла имея его URL SeRhy Работа с сетью в Delphi 2 19.04.2009 21:04
Как узнать размер файла? photozaz Общие вопросы Delphi 4 01.08.2008 00:29
Как мне узнать размер файла в байтах? satana Общие вопросы Delphi 4 26.09.2007 16:59