function Tform1.DownLoadFile(sURL,sFName:string):boolean;
var
tStream:TMemoryStream;
begin
tStream:=TMemoryStream.Create;
try
  try
idHttp1.Get(sURL,tStream);
tStream.SaveToFile(sFName);
Result:=true;
 finally
 tstream.Free;
 end;
except
Result:=false;
tStream.Free;end;end;代码如上

解决方案 »

  1.   

    去掉try finally的结构就可以 ,我这样写应该没错的
      

  2.   

    finally后面的代码
    是是否异常都执行;
    except是有异常才执行
      

  3.   

    在except 后面的 tStream.Free; 是多余的,如果有异常发生tStream被释放两次,又导致新的异常。
    finally是一定会执行的,except是有异常的时候才执行,所以不用调用两次Free
      

  4.   

    有错才会执行except里面的,这样就行了function Tform1.DownLoadFile(sURL,sFName:string):boolean;
    var
    tStream:TMemoryStream;
    begin
    Result:=false;
    tStream:=TMemoryStream.Create;
    try
    idHttp1.Get(sURL,tStream);
    tStream.SaveToFile(sFName);
    Result:=true;
    finally
    tstream.Free;
    end;end;
      

  5.   

    try
    idHttp1.Get(sURL,tStream);
    tStream.SaveToFile(sFName);
    Result:=true;
     finally
     tstream.Free;
     end;怎样运行都是正常的,所以不会except
      

  6.   

    你们都误会啦 ,我意思是,try except跟try finally合一起后发生错误不能运行except后的内容,我的本意是想无论有没错都执行finally的内容,有错就执行except的内容,现在像我那样写有错是执行不了except的内容
      

  7.   

    var
    tStream:TMemoryStream;
    begin
    tStream:=TMemoryStream.Create;
    try
      try
    idHttp1.Get(sURL,tStream);
    tStream.SaveToFile(sFName);
    Result:=true;
     except
    Result:=false;
     end;
    finally
     tstream.Free;
    end;
    end;
      

  8.   

    var
      tStream: TMemoryStream;
    begin
      tStream := TMemoryStream.Create;
      try
        try
          idHttp1.Get(sURL, tStream);
          tStream.SaveToFile(sFName);
          Result := true;
        except
          Result := false;
        end;
      finally
        tstream.Free;
      end;
    end;
      

  9.   

    var
      tStream: TMemoryStream;
    begin
      tStream := TMemoryStream.Create;
      try
        try
          idHttp1.Get(sURL, tStream);
          tStream.SaveToFile(sFName);
          Result := true;
        except
          Result := false;
        end;
      finally
        tstream.Free;
      end;
    end;