So steht das seit zig Jahren in meinem Code so drin und hat bisher immer funktioniert...
Daran kann es auch nicht liegen, denn der Code in TFileStream.Create sieht so aus:
Delphi-Quellcode:
if (Mode and fmCreate = fmCreate) then
begin
LShareMode := Mode and $FF;
if LShareMode = $FF then
LShareMode := fmShareExclusive; // For compat in case $FFFF passed as Mode
inherited Create(FileCreate(AFileName, LShareMode, Rights));
if FHandle = INVALID_HANDLE_VALUE then
raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(AFileName), SysErrorMessage(GetLastError)]);
end
Mit fmCreate or fmOpenWrite ergibt sich ein Mode = $FF01. Demnach ist die Bedingung erfüllt und LShareMode wird zu $01. FileCreate ignoriert aber die $01 völlig. Das wird erst relevant, wenn fmExclusive ins Spiel kommt.
OT: Bei solchen Codezeilen in TFileStream.Create frage ich mich immer wieder ob der Entwickler eigentlich versteht was er da schreibt:
Delphi-Quellcode:
{$IFDEF MSWINDOWS}
inherited Create(FileOpen(AFileName, Mode));
{$ELSE !MSWINDOWS}
inherited Create(FileOpen(AFileName, Mode));
{$ENDIF MSWINDOWS}