将文件加载到流中时,Delphi HTTP App引发错误

Jer*_*dge 4 delphi httpapplication tfilestream delphi-xe2

我一直在研究HTTP Web服务器应用程序(通过TIdHTTPWebBrokerBridge),并且在将文件加载到stream(TFileStream)以发送回客户端时遇到一些问题.它不是每次都会发生,而是随机发生......我一直在例外......

Cannot open file "C:\SomePath\SomeFile.html". The process cannot access the file because it is being used by another process

它出现在这一行:

Str:= TFileStream.Create('C:\SomePath\SomeFile.html', fmOpenRead);

(Str是一个TFileStream)

我假设这个消息代表自己,但我绝对需要避免它.此异常仅在调试模式下发生,但我需要调试此事情而不必担心始终收到此消息.

奇怪的是,大多数情况下,文件仍然被加载并发回.

我怎么能避免这个呢?为什么它不允许我不止一次打开它,即使它是只读的?

Dar*_*ler 6

正如@ain在评论中所述 - 您缺少构造函数中的共享模式.

改变这个

Str:= TFileStream.Create('C:\SomePath\SomeFile.html', fmOpenRead);
Run Code Online (Sandbox Code Playgroud)

对此

Str:= TFileStream.Create('C:\SomePath\SomeFile.html', fmOpenRead or fmShareDenyNone);
Run Code Online (Sandbox Code Playgroud)