Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#5

AW: FileExists funktioniert nicht bei Android?

  Alt 13. Sep 2022, 11:27
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}
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat