我现在定义了一个文件流FileStream01=TFileStream.Create(比如说一个已经存在的A.TXT);
之后又对它进行了readbuffer和writebuffer的操作,最后就FileStream01.free.
请问:
这样就对文件的操作和占用完全释放了吗?
我现在在操作文件的过程中出现了异常,但是我敢确定我已经在异常的捕捉后全FileStream01.free了,现在为什么我想把操作过的文件给删除了,系统却提示文件在使用中呢?

解决方案 »

  1.   


    try
    .
    .
    .
    finally
    .
    end可以保证释放
      

  2.   

    try
       FileStream01=TFileStream.Create
    finally
       FileStream01.free      
       FileStream01.Handle:=0;
    end;
    这样就可以了。保证 释放
      

  3.   

    谢谢楼上的!
    还有个问题就是,我定义一个MemoryStream:MS;我在程序中写
    if MS=nil then
     MS:=MemoryStream.Create();...
    ...MS.free;
    MS:=nil;
    没有什么问题?其实我的本意是想判断MS有没有创建,如果有就不创建实例了,没有就创建。我跟踪了一下,开始的时候MS确实是等于nil,但是创建后再释放就不是nil了,所以我就给他等于nil.程序是运行的没有毛病了,但是我也不知道这么写对不对,请大家指教
      

  4.   

    开始的时候MS确实是等于nil,但是创建后再释放就不是nil了,所以我就给他等于nil.程序是运行的没有毛病了,但是我也不知道这么写对不对,请大家指教Free 和 nil是两回事。
    Free只是销毁一个实例,但是指向这个实例的指针的值并没有改变(虽然这个实例已经不存在了)。
    所以,Free后一定要再nil才可以(如果你要再次使用它的话。)