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