Avatar billede friiiiis Novice
12. marts 2005 - 00:53 Der 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;
Avatar billede friiiiis Novice
12. marts 2005 - 12:26 #2
lige en lille tilføjelse...

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;
Avatar billede doc404 Novice
12. marts 2005 - 23:15 #3
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester