2013-01-20 5 views
1

다음 진술은 Delphi XE (Windows 7 x64)에서 제대로 실행되지만 Delphi XE3 (Windows 7 x64)에서는 "예외 클래스 EFOpenError with message ..."를 제공합니다. 그것은 마치 버그처럼 보입니다. 그렇다면 해결 방법이 있습니까? 대신 FILE_SHARE_READ or FILE_SHARE_WRITEDelphi XE3은 TFileStream의 생성자에서 "FILE_SHARE_READ 또는 FILE_SHARE_WRITE"를 지정할 때 EFOpenError를 제공합니다.

 TFileStream.Create(
     'C:\Test.txt' 
     , fmOpenRead, 
//  FILE_SHARE_READ); 
//  FILE_SHARE_WRITE); 
     FILE_SHARE_READ or FILE_SHARE_WRITE); 

답변

5

사용 fmShareDenyNone 상수 :

TFileStream.Create(
    'C:\Test.txt', fmOpenRead or fmShareDenyNone); 

그것은 버그가 아닙니다. 자세한 내용은 Documentation을 참조하십시오.

+0

의견을 보내 주셔서 감사합니다. 버그가 아니라면 델파이 XE 버전이 잘 돌아갑니다. 또한 "fmShareDenyNone"은 "4"이지만 "FILE_SHARE_READ 또는 FILE_SHARE_WRITE"는 "3"입니다.이 두 함수가 동일한 것을 의미합니까? (나는 하나의 SO 게시물에서 "FILE_SHARE_READ 또는 FILE_SHARE_WRITE"를 채택했다고 생각합니다.) – SOUser

+3

@ Xichen - fmShareDenyNone은 4가 아니지만 4라면 무엇이 다른가요? FILE_SHARE_ .. 플래그는'CreateFile'을위한 플래그이며, TFleStream과 아무 관련이 없습니다. –

+0

@ XichenLi - XE3이 없으므로 XE에서 세 번째 생성자 매개 변수가 무시됩니다. 'or'ed fmShareXXX 상수를 두 번째 매개 변수와 함께 사용하십시오. – kludg