下载文件函数。INDY10的。并且可以一段区域进行下载。
procedure TThread1.DownLodeFile();
var
temhttp: TIdHTTP;
iSize:Integer;
begin
temhttp := TIdHTTP.Create(nil);
temhttp.onWorkBegin := Form1.IdHTTP1WorkBegin;
temhttp.onwork := Form1.IdHTTP1work;
temhttp.onStatus := Form1.IdHTTP1Status;
Form1.IdAntiFreeze1.OnlyWhenIdle := False; //设置使程序有反应.
if FileExists(temFileName) then //如果文件已经存在
tStream := TFileStream.Create(temFileName, fmOpenWrite)
else
tStream := TFileStream.Create(temFileName, fmCreate);
tStream.Seek(0,soFromEnd);
if tResume then //续传方式
begin
exit;
end
else //覆盖或新建方式
begin
temhttp.Request.ContentRangeStart := tstart;
temhttp.Request.ContentRangeEnd := tlast;
temhttp.Request.Range := Format('%d-%d',[tstart,tlast]);否 //INDY10中必须添加(在INDY9中可以不用)
end;
try
///try
temhttp.Get(tURL, tStream); //开始下载
except
if FileExists(temFileName) then
begin
freeandnil(tstream);
deletefile(temFileName);//本来想用来删除未下完的文件,可惜不成功,有的线程没有删除,只有部分删除了,
//不过这样导致后面合并文件时出错,同样也可以把临时文件删除。
//ShowMessage('下载文件出错,临时文件已删除,请重新下载!');/
end;
temhttp.Disconnect;
end;
Form1.ListBox1.ItemIndex := Form1.ListBox1.Items.Add(temFileName +
'download');
//finally
freeandnil(tstream);
temhttp.Disconnect;
//end;
end;
INDY9中的DoQuest()INDY10可以用Head()