12. marts 2005 - 00:53Der er
2 kommentarer og 1 løsning
Størrelse af fil som downloades via internette via HTTP
Hej, jeg bruger WININIT til at downloade en fil med... for at kunne beregne hvor lang tid der er inden filen er endeligt downloadet, kalder jeg "InternetQueryDataAvailable" for at bestemme den filens størrelse...
Det kald til den funktion virker bare ikke! Det giver langt fr altid den korrekte størrelse, og når det er megte store filer giver den slet ikke det rigtige resultat... Hvordan gør jeg så?
kodelinierne er herunder...
function TMainFunctionForm.DownloadURL(const aUrl: string): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead,akk: DWORD; LocalFile:string; F : File; filesize : DWord; begin Result := False; LocalFile := 'C:\akljsdh.avi'; Assignfile(F,LocalFile); {$i-} Rewrite(F, 1); akk := 0;
hSession := InternetOpen('alds', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); InternetQueryDataAvailable(hService,filesize,INTERNET_FLAG_RELOAD,0); edit1.text := IntToStr(filesize); if Assigned(hService) then Application.processmessages; try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); if dwBytesRead = 0 then break; BlockWrite(F, lpbuffer, dwBytesRead); akk := akk + dwBytesRead; Application.ProcessMessages; ProgressBar1.Position := Round(akk/filesize * 100); end; Result := True; finally InternetCloseHandle(hService); end; end; finally InternetCloseHandle(hSession); end; CloseFile(F); end;
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
følgende funktioner VIRKER!!! men kodelinien tilsidst "CloseFile" generere en windows fejl (en høj lyd som indikere en systemfejl)... hvad gør jeg galt..??
function TMainFunctionForm.DownloadURL(const aUrl: string): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead,akk,dwindex,dwcodelen: DWORD; LocalFile:string; F : File; filesize : DWord; dwcode:pointer; res : pchar; begin Result := False; LocalFile := 'C:\akljsdh.avi'; Assignfile(F,LocalFile); Rewrite(F,1); akk := 0; dwcodeLen := 20; dwIndex := 0; hSession := InternetOpen('alds', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); HttpQueryInfo(hService, HTTP_QUERY_CONTENT_LENGTH, @dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); edit1.text := res; filesize := StrToInt(res); if Assigned(hService) then begin Application.processmessages; try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); BlockWrite(F, lpbuffer, dwBytesRead); if dwBytesRead = 0 then break; akk := akk + dwBytesRead; Application.ProcessMessages; ProgressBar1.Position := Round(akk/filesize * 100); end; Result := True; finally InternetCloseHandle(hService); end; end; end; finally InternetCloseHandle(hSession); end; CloseFile(F); end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.