Ich habe folgenden Code ersonnen, der grundsätzlich zwar funktioniert aber bei
mehrfachem Aufruf einfach stehen bleibt. Es klappt 10 bis 12 mal in kurzer Folge und dann ist Schluß. Keine
Exception, kein Timeout, keine Reaktion. Hab ne Erfolgsquote von etwa 93% ausgerechnet. Das reicht aber nicht.
Bin auf .Net nicht jetzt so fit. Mache ich vielleicht irgendwelche Kardinalfehler?
Delphi-Quellcode:
method MainForm.DownloadFile(RemoteFile: String; LocalFile: String): Cardinal;
var BytesProcessed: Cardinal;
RemoteStream: Stream;
LocalStream: Stream;
Response: WebResponse;
Request: WebRequest;
Buffer: Array of Byte;
BytesRead: Cardinal;
begin
try
try
Request := HTTPWebRequest.Create('http://'+FURL+RemoteFile);
if Assigned(Request) then
begin
Request.Timeout := 60*1000;
Request.Proxy:=nil;
Response := Request.GetResponse(); // hier bleibt er einfach stehen...
if Assigned(Response) then
begin
RemoteStream := Response.GetResponseStream();
LocalStream := File.Create(LocalFile);
Buffer := new Byte[1024];
repeat
BytesRead := RemoteStream.Read(Buffer, 0, Buffer.Length);
LocalStream.Write(Buffer, 0, BytesRead);
inc(BytesProcessed, BytesRead);
until BytesRead = 0;
end;
end;
except
WriteToLog('Ähm... shit...');
end;
finally
if Assigned(RemoteStream) then
begin
RemoteStream.Flush;
RemoteStream.Close;
RemoteStream.Dispose;
end;
if Assigned(LocalStream) then
begin
LocalStream.Flush;
LocalStream.Close;
LocalStream.Dispose;
end;
if Assigned(Response) then
Response.Close();
LocalStream:=nil;
RemoteStream:=nil;
Response:=nil;
Request:=nil;
end;
Result:=BytesProcessed;
end;
Gruß,
Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?