Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> размер файла в интернете, неточно определяется 
:(
    Опции темы
Driv3r
Дата 27.4.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Нужно узнать размер файла находящегося по заданному URL.Использую InternetQueryDataAvailable .Размер небольших файлов определяет точно,но если размер файла за 100кб начинаются серьёзные погрешности.Как быть? 
PM MAIL   Вверх
Демо
Дата 28.4.2006, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 3
Всего: 50



Цитата(Driv3r @  27.4.2006,  19:01 Найти цитируемый пост)
Как быть? 


Видимо, приводить код, который используешь?
Иначе можно сразу сказать, что ошибка в 17-й строке. 


--------------------
    
PM MAIL ICQ Skype   Вверх
Driv3r
Дата 28.4.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 39
Регистрация: 3.7.2005

Репутация: нет
Всего: нет



Вроде этого:
Код

var
url:HInternet;
Razmer:dword;
begin
InternetQueryDataAvailable(url, Razmer,0,0);
 
PM MAIL   Вверх
RaIDeR
Дата 30.4.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.6.2005

Репутация: 1
Всего: 4



Попробуй так:
Код

function GetInetFileSize(const Host, FileName: String) : Integer;
const
  ContentLength = 'Content-Length';

var
  Buf: String;
  BufLen, dw: DWORD;
  hInet, hConnect, hRequest: HINTERNET;
begin
  Result := - 1;
  hInet := InternetOpen(nil, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  if hInet <> nil then
    try
      hConnect := InternetConnect(hInet, PChar(Host), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
      if hConnect <> nil then
        try
          hRequest := HttpOpenRequest(hConnect, nil, PChar(FileName), nil, nil, nil, 0, 0);
          if hRequest <> nil then
            try
              Buf := 'Range: bytes=0-' + #13#10 + 'Referer: ' + Host + #13#10 + 'Host: ' + Host;
              if HttpSendRequest(hRequest, PChar(Buf), Length(Buf), nil, 0) then
              begin
                dw := 0; Buf := ''; BufLen := 0;

                while not HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, PChar(Buf), BufLen, dw) do
                  SetLength(Buf, BufLen);

                if (Pos('HTTP/1.0 206', Buf) <> 0) or (Pos('HTTP/1.1 206', Buf) <> 0) then
                  if Pos(ContentLength, Buf) <> 0 then
                  begin
                    Delete(Buf, 1, Pos(ContentLength, Buf) + Length(ContentLength));
                    Result := StrToInt(Copy(Buf, 1, Pos(#13, Buf) - 1));
                  end;
              end;
            finally
              InternetCloseHandle(hRequest);
            end;
        finally
          InternetCloseHandle(hConnect);
        end;
    finally
      InternetCloseHandle(hInet);
    end;
end;

Использование ф-ции:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  FileSize: Integer;
begin
  FileSize := GetInetFileSize('127.0.0.1', '/test.rar');
  if FileSize = - 1 then
    ShowMessage('А может нет такого файла, а ? =)')
  else
    ShowMessage(IntToStr(FileSize));
end;
 
PM MAIL   Вверх
djmix777
Дата 25.7.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.7.2006
Где: Россия

Репутация: нет
Всего: нет



у меня дельфи 5 - ый, не получается по вышеприведённым примерам получить размер файла из инета
перед скачиванием

помогите плз! 
PM MAIL   Вверх
Matematik
Дата 25.7.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Цитата(djmix777 @  25.7.2006,  14:46 Найти цитируемый пост)
у меня дельфи 5 - ый, не получается по вышеприведённым примерам получить размер файла из инетаперед скачиваниемпомогите плз! 

Телепаты в отпуске.
Пример работает. Что конкретно не получается? 
PM MAIL WWW ICQ   Вверх
Poseidon
Дата 25.7.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Эх... люблю я Indy ^)

Код
uses IdHTTP;

function GetInetFileSize(const FileUrl:string):integer;
var idHTTP: TidHTTP;
begin
  Result:=0;
  idHTTP:=TIdHTTP.Create(nil);
  idHTTP.Head(FileUrl);
  Result:=idHTTP.Response.ContentLength;
  IdHTTP.Free;
end; 
 


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
djmix777
Дата 26.7.2006, 05:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.7.2006
Где: Россия

Репутация: нет
Всего: нет



Matematik, да я в курсе что телепаты н заслуженном  отдыхе, дело в том что
примерчик то вроде работет, компилится,

а я просто не могу придумать как с 

Код

FileSize := GetInetFileSize('127.0.0.1', '/test.rar');


тут бы было хорошо чтобы просто по ссылке определял размер, а то ip определять и прочее, не очень то!


Poseidon, а с Indy как бы сделать чтобы мне на 5 установить
а то ведь обламываюсь, все пишут а я ничего сделать не могу smile


помогите адаптировать мне мой 5 дельфи, или помогите плиз с доступным кодом для 5 дельфи


Спасибо!!!

Добавлено @ 05:45 
Matematik, да я в курсе что телепаты н заслуженном  отдыхе, дело в том что
примерчик то вроде работет, компилится,

а я просто не могу придумать как с 

Код

FileSize := GetInetFileSize('127.0.0.1', '/test.rar');


тут бы было хорошо чтобы просто по ссылке определял размер, а то ip определять и прочее, не очень то!


Poseidon, а с Indy как бы сделать чтобы мне на 5 установить
а то ведь обламываюсь, все пишут а я ничего сделать не могу smile


помогите адаптировать мне мой 5 дельфи, или помогите плиз с доступным кодом для 5 дельфи


Спасибо!!! 
PM MAIL   Вверх
Matematik
Дата 26.7.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



Автоматический установщик Indy http://www.atozed.com/indy/plus/files.aspx

Код

procedure GetInetFileSize_(URL:String);
var
  FileSize: Integer;
  host,fil: String;
  p : Integer;
begin
  host := '';
  fil  := '';
  p := pos('://', URL);
  if p>0 then
    Delete(URL,1,p+2);
  p := pos('/', URL);
  if p>0 then
  begin
    fil  := copy(URL,p,maxint);
    Host := copy(URL,1,p-1)
  end
         else
  begin
    fil  := '/';
    Host := URL
  end;
  FileSize := GetInetFileSize(Host, fil);
  if FileSize = - 1 then
    ShowMessage('А может нет такого файла, а ? =)')
  else
    ShowMessage(IntToStr(FileSize));
end;

 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1492 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.