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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать общий размер загружаемых файлов 
V
    Опции темы
youriy86
Дата 28.1.2011, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, мне нужно написать небольшой загрузчик для моей программы. Файлов много и некоторые из них прилично "весят".
Чтобы узнать размер одного файла я использовал 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;


Это сообщение отредактировал(а) youriy86 - 28.1.2011, 08:47
PM MAIL   Вверх
Snowy
Дата 28.1.2011, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Более рациональный метод - посчитать размер всех файлов локально (когда выкладываешь их на сервер) и результат выложить в отдельный файлик на сервер.
Вот этот файлик скачиваешь и смотришь, что в нем написано.
PM MAIL   Вверх
youriy86
Дата 28.1.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Благодарю. Работает быстрее )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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