Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как узнать общий размер загружаемых файлов


Автор: youriy86 28.1.2011, 08:35
Здравствуйте, мне нужно написать небольшой загрузчик для моей программы. Файлов много и некоторые из них прилично "весят".
Чтобы узнать размер одного файла я использовал HttpQueryInfo, все работает. И проблему решаю многократным вызовом этой функции для всех файлов, которые хочу скачать, и дальнейшим суммированием полученных результатов.
Но мне интересно узнать, есть ли более рациональный метод?

Код

function FileSize(AURL: HInternet): Integer;
var
  vInfoBuffer: array[1..20] of Char;
  vInfoIndex: DWORD;
  vBufferLen: DWORD;
begin
  vInfoIndex := 0;
  vBufferLen := 20;
  if HttpQueryInfo(AURL,HTTP_QUERY_CONTENT_LENGTH,@vInfoBuffer,vBufferLen,vInfoIndex) then
    FileSize := StrToInt(StrPas(@vInfoBuffer))
  else
    FileSize := -1;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  vSession, vURL: HInternet;
  vAppName: string;
  s: Integer;
  vPath,vName: string;
begin
  vAppName := ExtractFileName(Application.ExeName);
  vSession := InternetOpen(PChar(vAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  s := 0;
  vPath := 'http://10.10.10.3/sed_share/test_upd/';
  vName := 'p1.exe';
  vURL := InternetOpenURL(vSession,PChar(vPath + vName),nil,0,0,0);
  s := s + FileSize(vURL);
  InternetCloseHandle(vURL);
  vName := 'p2.exe';
  vURL := InternetOpenURL(vSession,PChar(vPath + vName),nil,0,0,0);
  s := s + FileSize(vURL);
  InternetCloseHandle(vURL);
  vName := 'p3.exe';
  vURL := InternetOpenURL(vSession,PChar(vPath + vName),nil,0,0,0);
  s := s + FileSize(vURL);
  InternetCloseHandle(vURL);
  vName := 'sed_2.0_setup.exe';
  vURL := InternetOpenURL(vSession,PChar(vPath + vName),nil,0,0,0);
  s := s + FileSize(vURL);
  InternetCloseHandle(vURL);
  Edit1.Text := IntToStr(s);
end;

Автор: Snowy 28.1.2011, 12:05
Более рациональный метод - посчитать размер всех файлов локально (когда выкладываешь их на сервер) и результат выложить в отдельный файлик на сервер.
Вот этот файлик скачиваешь и смотришь, что в нем написано.

Автор: youriy86 28.1.2011, 13:32
Благодарю. Работает быстрее )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)