TStringList 奇怪的问题,伤心死人了。(30分)

  • 主题发起人 主题发起人 6713827
  • 开始时间 开始时间
6

6713827

Unregistered / Unconfirmed
GUEST, unregistred user!
Function TreeFile(Path : String) : Bool;<br>Var Temp: TStringList;<br>Begin<br> &nbsp;Temp := TStringList.Create;<br> &nbsp;Temp.LoadFromFile(Path);<br> &nbsp;Temp.Free;<br>End;<br>代码看起来很简单,但是问题很奇怪.<br>这样的语句是动态调用的,我是用的FOR循环来调用的,当循环超过了3次,以后,其中有一个文件一定有一个文件正打开着,不会被释放,当下次循环就提示错误Cannot Open File &quot;E:/Temp/XXXX.ini&quot;.另一个程序正在使用此文件,进程无法访问。.<br>这是他自己打开的,为什么他自己不能释放呢?????<br>但是FOR循环循环2次就不会出这问题.<br>第一次执行循环不会出问题,执行第二次循环就会出这问题了!!!<br><br>每次循环读取的文件都不一样!!!
 
我不知道自己的理解是不是正确,下面是我的测试代码。<br>没有出现你说的问题。<br>function TreeFile(Path:string):Bool;<br>var Temp:TStringList;<br>begin<br> &nbsp;Temp:=TStringList.Create;<br> &nbsp;Temp.LoadFromFile(Path);<br>// &nbsp;Application.ProcessMessages; 你是不是可以加上?我的代码没有加的。<br> Temp.Free;<br>end;<br><br>procedure TForm1.Button1Click(Sender:TObject);<br>var i,j:Integer;<br>begin<br> &nbsp;for j:=1 to 20 do<br> &nbsp; &nbsp;for i:=1 to 4 do<br> &nbsp; &nbsp; &nbsp;TreeFile('c:/'+inttostr(i)+'.txt');<br> ShowMessage('OK');<br>end;<br>//我建立了1,2,3,4四个文本文件。<br>但是,我的文件很小。不知道你的是不是很大。
 
多线程调用吗?<br>按照你上面的写法是不会的啊。<br>基类里都有写.Free<br><br>procedure TStrings.LoadFromFile(const FileName: string);<br>var<br> &nbsp;Stream: TStream;<br>begin<br> &nbsp;Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);<br> &nbsp;try<br> &nbsp; &nbsp;LoadFromStream(Stream);<br> &nbsp;finally<br> &nbsp; &nbsp;Stream.Free; //有释放<br> &nbsp;end;<br>end;
 
兄弟,请等下,我先试试完成的,我测试也没有问题,但是我在完整的程序上就出现这问题。真的很感谢你啊!
 
zywcd兄弟,你有QQ吗?<br><br>我想还是QQ交流一下,我试过了,直接写出来没有问题,但是将他写到整个程序里就出问题了,郁闷了,我把代码发给你,你帮我分析一下!!好吗?
 
我的QQ是6713827
 
非常感谢啊!<br>有机会一定好好请你一顿!
 
后退
顶部