我不确定这是否是检查是否引发TIdHTTP异常的最佳方式,这就是我所做的:
HTTP := TIDHttp.Create(nil);
try
try
HTTP.Head(URL);
SizeF := HTTP.Response.ContentLength;
code := HTTP.ResponseCode;
except
on E: Exception do
begin
code := HTTP.ResponseCode;
ShowMessage(IntToStr(code));
end;
end;
finally
HTTP.Free;
end;
if code = 200 then
// go download the file using multiple threads.
我想要实现的是提出一个假设就是有一个(我想我已经做过),否则程序会继续运行并下载文件。 那么这是正确的方法吗?谢谢你的回复。
答案 0 :(得分:3)
作为一项通用规则:只在您可以并且想要处理它们时才处理异常。
否则让它们只是流动以停止当前执行的代码。在没有任何拦截的情况下,您将收到一个包含异常消息的对话框(由TApplication
处理)。
在这种情况下,您可以将代码更改为
HTTP := TIDHttp.Create(nil);
try
HTTP.Head(URL);
// if an exception is raised then the rest of the code will not be executed
// yes, the code in finally part will execute
SizeF := HTTP.Response.ContentLength;
code := HTTP.ResponseCode;
finally
HTTP.Free;
end;
// check if all conditions are met
if code <> 200 then
// if not, raise a custom exception as you like
raise Exception.Create( 'Not what I expected here' );
// go download the file using multiple threads.