2012-03-24 85 views
4

我一直工作在HTTP Web服务器应用程序(通过TIdHTTPWebBrokerBridge),并有一个小问题,当谈到加载文件转换成流(TFileStream)被发送回抚养错误客户。它不发生的每一次,但相当随机...我不断收到一个例外......德尔福HTTP应用程序时加载文件到流

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);

(海峡是一个TFileStream

我假设该消息说明了它的自我,但我绝对需要避免。这个异常只发生在调试模式下,但我需要调试这个东西,而不必担心这个消息会一直出现。

奇怪的是,大多数情况下,文件无论如何都会被加载并发回。

我怎么能避免这种情况呢?为什么它不允许我多次打开它,即使它是只读的?

+4

好了,你不要在你的代码中使用共享模式......也许使用'fmShareDenyWrite'或'fmShareDenyNone'所有需要的多数民众赞成要解决您的问题,请参阅http://docwiki.embarcadero.com/Libraries/en/System.Classes.TFileStream.Create – ain 2012-03-24 17:38:03

回答

6

由于@ain在注释中声明 - 您在构造函数中缺少共享模式。

更改此

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

这个

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

是的,它做到了!这表明永远不会完全信任您在互联网上找到的任何示例源代码:P – 2012-03-24 18:49:19

+0

我希望Delphi中默认的打开+共享模式是fmOpenRead + fmShareDenyWrite,它可以解决初学者遇到的许多问题。 – 2012-03-24 21:34:35