2012-03-24 4 views
4

나는 (TIdHTTPWebBrokerBridge을 통해) HTTP 웹 서버 응용 프로그램에서 작업 중이며 스트림으로 파일을로드 할 때 약간의 문제가 있습니다 (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);

(STR은 인 TFileStream)

나는 메시지가 자기 자신을 위해 말하고 있다고 가정하고 있지만, 나는 그것을 절대 피할 필요가있다. 이 예외는 디버그 모드에서만 발생하지만 항상이 메시지를받는 것에 대해 걱정하지 않고이 문제를 디버깅해야합니다.

이상하게도 대부분의 경우 파일은로드되어 어쨌든 되돌려 보내집니다.

어떻게 이것을 피할 수 있습니까? 그리고 왜 내가 그것을 한 번 이상 열지 못하게 할 수 있습니까?

+4

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

, 당신은 아마도'사용 fmShareDenyWrite' 또는'fmShareDenyNone' ... 코드에서 공유 모드를 사용하지 않는 것은 필요한 모든 그게 전부입니다 문제를 해결하려면 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

델파이의 기본 open + share 모드는 fmOpenRead + fmShareDenyWrite로 시작하는 많은 문제를 해결할 수 있기를 바랍니다. –