2013-01-20 36 views
1

在Delphi XE(Windows 7 x64)下,以下语句在Delphi XE(Windows 7 x64)下正常运行,但给出了“Exception class EFOpenError with message ...”。它看起来像一个错误。如果是这样,是否有解决方法?在TFileStream的构造函数中指定“FILE_SHARE_READ或FILE_SHARE_WRITE”时,Delphi XE3给出EFOpenError

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

回答

5

使用fmShareDenyNone常量而不是FILE_SHARE_READ or FILE_SHARE_WRITE

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

它是不是一个错误。详情请参阅Documentation

+0

非常感谢您的建议!如果它不是bug,那么Delphi 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

相关问题