AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi URLDownloadToFile Speed anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

URLDownloadToFile Speed anzeigen

Ein Thema von ebber · begonnen am 30. Sep 2007 · letzter Beitrag vom 10. Okt 2007
Antwort Antwort
ebber

Registriert seit: 31. Okt 2006
243 Beiträge
 
#1

Re: URLDownloadToFile Speed anzeigen

  Alt 4. Okt 2007, 14:33
Zitat von ebber:
Hallo

Gibt es bei den beiden Funktionen einen Unterschied in der Effizienz ?
Diese Frage ist immer noch offen, aber ich habe mich bei der andern ein bisschen schlauer gemacht und es sogar fast selbst gelöst.
Hätte ich vielleicht vor der Frage schon tun sollen...

Hier habe ich nun die ganze funktion noch einmal ein bisschen erweitert, sie findet jetzt die Dateigröße heraus. Und ich habe sie noch ein bisschen für mich angepasst.

Das Problem ist, die bereits heruntergeladenen bytes werden irgendwie nicht richtig gezählt, da kommen zu viel raus, ein bisschen weniger als doppelt so viel. Habe ich da einen Denkfehler drin ?

Delphi-Quellcode:

function TForm1.DownloadFile(const URL: String; const FilePath: String; FileName: String = ''): Boolean;
var
   KbpsCounter, Kbps: Integer;

   Ticks, BytesRead, acsize, index, codelen: DWORD;
   Buffer: Array [0..1023] of Byte;

   hSession, hRequest: HINTERNET;

   DlFile : File;

   code : array[1..20] of char;
   
begin
   Result := False;
   KbpsCounter := 0;

   (* Dateinamen festlegen *)
   if Filename <> 'then
      Filename := FilePath + FileName
   else
      Filename := FilePath + ExtractFileName(Slashtobackslash(URL));

   (* Session öffnen *)
   Label3.Caption := 'connecting ...';
   hSession := InternetOpen('AppTitel', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
   if hSession <> nil then
   begin
      (* URL öffnen *)
      hRequest := InternetOpenUrl(hSession, PChar(URL), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if hRequest <> nil then
      begin

         (* checken ob Datei schon existiert *)
         if FileExists(FileName) then
         if idOK <> (Application.MessageBox('File already exists. Replace ? '
                                  , PChar(Caption)
                                      , MB_OKCANCEL)) then exit;

         (* Dateigröße herausfinden *)
         Index:= 0;
         CodeLen:= 10;
         HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH, @code, codeLen, Index);
         Label4.Caption := formatfloat('0.00',Strtoint(Pchar(@code)) / 1024 / 1024)+' mb';

         (* Download starten *)
         Label3.Caption := 'starting ...';
         AssignFile(DlFile, FileName);
         try
            Rewrite(DlFile, 1);
            Ticks := GetTickCount;

            while True do
            begin
               (* Daten auslesen *)
               Label3.Caption := 'loading ...';
               if InternetReadFile(hRequest, @Buffer, 1024, BytesRead) = False then
                  Break;

               (* bereits geladene kbps berechnen *)
               acsize := acsize + BytesRead;
               Label1.caption := formatfloat('0.00', acsize / 1024 / 1024) + ' mb';

               (* kbps jede Sekunde berechnen *)
               Inc(KbpsCounter, BytesRead);
               if Ticks <= (GetTickCount - 1000) then
               begin
                  Kbps := KbpsCounter div 1024;
                  if Kbps < 1000 then
                     Label2.Caption := intToStr(Kbps) + ' kb/s'
                  else
                        Label2.Caption := formatfloat('0.00', Kbps / 1024) + ' mb/s';
                  KbpsCounter := 0;
                  Ticks := GetTickCount;
               end;

               (* In Datei schreiben *)
               if BytesRead <> 0 then
                  BlockWrite(DlFile, Buffer, BytesRead)
               else //Download beendet
               begin
                  Label3.Caption := 'finished';
                  Result := True;
                  Break;
               end;

               if usercancel then
               begin
                  Label3.Caption := 'canceled';
                  Label2.Caption := '';
                  Result := False;
                  Break;
               end;

               Application.ProcessMessages;
            end;
         finally
            CloseFile(DlFile);
            InternetCloseHandle(hRequest);
         end;
      end;
      InternetCloseHandle(hSession);
   end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz