Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Download-Programm (https://www.delphipraxis.net/100441-download-programm.html)

Rastaman 29. Sep 2007 13:24

Re: Download-Programm
 
Soooo. Ungetestet ...

Delphi-Quellcode:
function TForm1.DownloadFile(const URL: String; const FileName: String)
var
   KbpsCounter: Integer = 0;
   Kbps: Integer;

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

   DownloadFile: File;

   hSession, hRequest: HINTERNET;
begin
   Result := False;

   (* Session öffnen *)
   hSession :=   InternetOpen('AppTitel', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
   if hSession <> nil then
   begin
      (* URL öffnen *)
      hRequest :=   InternetOpenUrl(hSession, URL, nil, 0, INTERNET_FLAG_RELOAD, 0);
      if hRequest <> nil then
      begin
         (* Download starten
            vllt checken ob Datei schon existiert? *)
         AssignFile(DownloadFile, FileName);
         try
            Rewrite(DownloadFile, 1);   
            Ticks := GetTickCount;

            while True do
            begin
               (* Daten auslesen *)
               if InternetReadFile(hRequest, @Buffer, 1024, BytesRead) = False then
                  Break;

               (* kbps jede Sekunde berechnen *)
               Inc(KbpsCounter, BytesRead);
               if Ticks <= (GetTickCount - 1000) then
               begin
                  Kbps := KbpsCounter / 1024;
                  // Label1.Caption := IntToStr(Kbps) + ' Kilobyte pro Sekunde';
                  KbpsCounter := 0;
                  Ticks := GetTickCount;
               end;

               (* In Datei schreiben *)
               if BytesRead <> 0 then
                  BlockWrite(DownloadFile, Buffer, BytesRead);
               else //Download beendet
               begin
                  Result := True;
                  Break;
               end;

               Application.ProcessMessages;
            end;
         finally
            CloseFile(DownloadFile);
            CloseInternetHandle(hRequest);
         end;
      end;
      CloseInternetHandle(hSession);
   end;
end;
Aufruf is ja klar :wink:
Bitte mal testen und Fehler berichtigen.

MFG
Rasta

Edit:
Eine Fortschrittsanzeige wäre sicherlich ein Leichtes, allerdings habe ich beim Versuch die Dateigröße zu ermitteln
immer 0 Byte zurück bekommen, also habe ich es erstmal raus genommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:17 Uhr.
Seite 3 von 3     123   

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