procedure TUpdateThread.DateiDownload(strUrl, strLocalFile:
String);
var
flgexit:Boolean;
intLength, intRangeEnd, intStartLength: Int64;
IdDateiDownload: TIdHTTP;
fileDatei: TFileStream;
begin
IdDateiDownload := TIdHTTP.Create(
nil);
fileDatei:=nil;
try
try
IdDateiDownload.ConnectTimeout := 10000;
IdDateiDownload.ReadTimeout := 10000;
IdDateiDownload.Head(strUrl);
intStartLength := 0;
intLength := IdDateiDownload.Response.ContentLength;
//Ermittel die Startgröße
if FileExists(strLocalFile)
then begin
fstrProtText := '
Die '+strLocalFile+'
Datei existiert bereits und wird nun gelöscht';
fflgProtCaption := false;
Synchronize(AddProt);
DeleteFile(strLocalFile);
end;
//Setze die Progressbar
fintProgressStartPosition := intStartLength;
fintProgressMaxPosition := intLength;
Synchronize(MainDownloadProgressBegin);
fstrProtText := '
Lade die Datei '+ExtractFileName(strLocalFile)+'
herunter';
fflgProtCaption := true;
Synchronize(AddProt);
flgexit := false;
fileDatei:=nil;
if not FileExists(strLocalFile)
then begin
fileDatei := TFileStream.Create(strLocalFile, fmCreate);
end
else begin
fileDatei := TFileStream.Create(strLocalFile, fmOpenReadWrite);
end;
//Prüfe ob Datei verwendet wird
repeat
flgexit := fileDatei.Size >= intLength;
if not flgexit
then
fileDatei.Seek(Max(0, fileDatei.Size-4096), soFromBeginning);
intRangeEnd := fileDatei.Size+50000;
if intRangeEnd < intLength
then begin
IdDateiDownload.Request.Range := IntToStr(fileDatei.Position) + '
-'+ IntToStr(intRangeEnd);
end
else begin
IdDateiDownload.Request.Range := IntToStr(fileDatei.Position) + '
-';
flgexit := true;
end;
IdDateiDownload.Get(strUrl, fileDatei);
if intRangeEnd < intLength
then begin
fintProgressPosition := intRangeEnd;
Synchronize(MainDownloadProgressWork);
end
else begin
fintProgressPosition := intLength;
Synchronize(MainDownloadProgressWork);
end;
until (flgexit
OR Terminated);
fileDatei.Free;
IdDateiDownload.Disconnect;
except
on E :
Exception do
Begin
MessageDlg('
Bei dem Herunterladen von Dateien ist ein Fehler aufgetreten: '+E.
Message, mtError, [mbOK], 0);
end;
end;
finally
IdDateiDownload.Free;
end;
end;