我在一个程序中有很多命令,并且有这个命令:
...
Stream:=TFileStream.Create(FileName,fmOpenread);
...
创建整个过程以将文件从TClientSocket发送到TServerSocket。
该过程每隔100毫秒从Timer启动一次。当然,有时我会显示EFCreateError错误,因为该文件已被使用。
一切都运行良好,因为收到了一些数据。但是如何避免显示此错误?
答案 0 :(得分:2)
您需要捕获错误并进行处理。 请参阅下面的代码。
....
try
Stream:=TFileStream.Create(FileName,fmOpenread);
except on E: EFCreateError do
Stream:= nil;
end; {try}
if Stream <> nil then try
//rest of your procedure
finally
Stream.Free; //make sure your stream is freed.
end;
如果此处出现错误,则运行时不会显示任何消息,在调试中您会看到错误,但您可以忽略该错误。
如果出错,Stream
变量将设置为nil
在下面的代码中,您可以测试Stream <> nil
或Assigned(Stream)
(这是相同的),如果一切正常,请对流进行处理。
答案 1 :(得分:1)
我想我明白你的意思......
您确实正确处理了异常,但是您希望避免发生每个异常的Delphi IDE弹出窗口。
如果是,请执行以下操作:
答案 2 :(得分:1)
为什么不用互斥锁或读/写锁来包含对文件的访问?那么你就不需要依赖这样一种脆弱的方法了。
这听起来像是将文件轮询为进程间通信机制。管道之类的东西可能更有效。
答案 3 :(得分:-2)
使用try ... finally清理并尝试...除了吞下预期的异常:
Stream := nil; // if it is an unitialized local variable, assign nil
try
try
Stream := TFileStream.Create(Filename, fmOpenread);
except
on E: EFCreateError do
begin
// exception thrown if the file is in use
// and may be ignored in this function
end;
end;
finally
Stream.Free;
end