Hi
ich bin grad dabei mir nen updater zu schreiben.
Zum downloaden mit Fortschrittsanzeige über IdHTTP.get hab ich
hier ne Function gefunden, die ich leicht umgeändert habe:
Delphi-Quellcode:
function Downloaden(Source: String): Boolean;
var
BytesKopiert, BytesInsgesamt : int64;
lStream: TFileStream;
con: TextFile;
begin
AssignFile(con, 'CON:');
Rewrite(con);
Write(con, Source + ' wird heruntergeladen... ');
BytesKopiert := 0;
IdHTTP1.Head('http://server.de/'+Source);
BytesInsgesamt := IdHTTP1.Response.ContentLength;
if BytesInsgesamt = -1 then
begin
lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone);
try
idHTTP1.Get('http://server.de/'+Source, lStream);
finally
if Assigned(lStream) then lStream.Free;
end;
Write(con, #13, Source + ' wird heruntergeladen... OK' + CR);
CloseFile(con);
exit;
end;
lStream:=TFileStream.Create(AppPath + Source, fmCreate or fmShareDenyNone);
lStream.Position := 0;
try
repeat
if (BytesInsgesamt-BytesKopiert) > cFileSplitSize then
begin
IdHttp1.Request.Range := Format('%d-%d', [BytesInsgesamt, (BytesKopiert+cFileSplitSize-1)]);
end else
IdHttp1.Request.Range := Format('%d-', [BytesKopiert]);
Application.ProcessMessages;
IdHTTP1.Get('http://server.de/'+Source, lStream); // <-- Hier tritt das Problem auf
BytesKopiert := BytesKopiert+cFileSplitSize;
Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesKopiert)+'/'+GetSizeName(BytesInsgesamt), ' [', FloatToStr((BytesKopiert/BytesInsgesamt)*100), '%]');
until (BytesKopiert >= BytesInsgesamt);
finally
if Assigned(lStream) then lStream.Free;
CloseFile(con);
end;
Write(con, #13, Source + ' wird heruntergeladen... ', GetSizeName(BytesInsgesamt), ' OK', CR);
end;
Das Problem ist folgende Fehlermeldung:
Zitat:
---------------------------
Benachrichtigung über Debugger-
Exception
---------------------------
Im Projekt Updater.exe ist eine
Exception der Klasse EIdHTTPProtocolException mit der Meldung 'HTTP/1.1 416 Requested Range Not Satisfiable' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Die Stelle wo das Problem auftritt hab ich oben im Quelltext gekennzeichnet.
Das Programm ist eine Konsolenanwendung, und wenn ich die Datei ohne Fortschrittsanzeige runterlade:
Delphi-Quellcode:
lStream := TFileStream.Create(AppPath + Source, fmCreate);
IdHTTP1.Get('http://server.de/'+Source, lStream);
lStream.free;
gehts...
was mach ich falsch?
mfg.Dominik