2012-03-24 22 views
4

私はHTTP Webサーバーアプリケーション(TIdHTTPWebBrokerBridge経由)で作業していましたが、ファイルをストリームにロードするときに少し問題があります(TFileStream)。クライアント。それは毎回発生しませんが、かなりランダムに...私は例外を取得...ファイルをストリームにロードするときに発生するDelphi HTTP Appのエラーが発生しました。

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

私はそのメッセージが自己について語っていると仮定していますが、絶対に避ける必要があります。この例外はデバッグモードでのみ発生しますが、このメッセージを常に取得することを心配することなくこの問題をデバッグする必要があります。

奇妙なことに、ほとんどの場合、ファイルはロードされてとにかく戻されます。

どうすればこの問題を回避できますか?それでなぜ読んだだけであっても、二度以上それを開くことができないのでしょうか?

+4

変更この

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

さて、あなたはおそらく 'fmShareDenyWrite'または' fmShareDenyNone'は、すべてのthatsが必要であるを使用して...あなたのコード内で共有モードを使用していません問題を解決するには、http://docwiki.embarcadero.com/Libraries/en/System.Classes.TFileStream.Create – ain

答えて

6

@ainがコメントに記載されているように、コンストラクタで共有モードが欠落しています。この

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

を参照してください。これは、インターネット上で見つかるサンプルソースコードを完全に信頼しないことを指摘しています。P –

+0

Delphiのデフォルトのオープン+シェアモードは、fmOpenRead + fmShareDenyWriteだったので、多くの問題を解決できました。 –

関連する問題