FileCreate bei schreibgeschütztem Laufwerk

cgaertner
Beiträge: 27
Registriert: Sa 10. Okt 2020, 21:54

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von cgaertner »

Also dieses Programm gibt bei mir erwartungsgemäß "Fehler!" zurück, wenn ich nach "/test.txt" schreiben möchte und es ist erfolgreich, wenn ich "/home/christian/test.txt" angebe. Mit der schreibgeschützten SD-Karte konnte ich es leider (noch) nicht testen, da ich das SD-Karten-Laufwerk nicht zu VMware verbunden kriege ...

Code: Alles auswählen

var
  hDatei: file;
begin
  AssignFile(hDatei, '/test.txt');
  try
    Rewrite(hDatei);
  except
    ShowMessage('Fehler!');
  end;
  ShowMessage('Ende.');
end;

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von Mathias »

Kanmst ja versuchen auf eine cdrom zu schreiben. Oder kannst du dies auch nicht mit vmware verbinden ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

cgaertner
Beiträge: 27
Registriert: Sa 10. Okt 2020, 21:54

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von cgaertner »

Mathias hat geschrieben:
So 25. Okt 2020, 20:43
Kanmst ja versuchen auf eine cdrom zu schreiben. Oder kannst du dies auch nicht mit vmware verbinden ?
Ja, wäre auch eine Idee. Doch da hätte ich das externes Laufwerk suchen müssen. :-)

Ich habe es aber mittlerweile geschafft, die SD-Karte unter Vware einzubinden (Tipp: man muß sie als IDE-Festplatte in den Einstellungen der virtuellen Maschine hinzufügen). Das oben von mir geschriebene Programm funktioniert auch, wenn ich die SD-Karte schreibgeschützt habe und als Pfad zum Testen beispielsweise "/mnt/sd/test.txt" angebe.

Damit scheint es für eine cross-platform Funktionalität lediglich wichtig zu sein, unter Windows das "SetErrorMode(SEM_FAILCRITICALERRORS);" drinnen zu haben, um den Fehler mit try/except abfangen zu können; unter Linux geht es von Haus aus.

cgaertner
Beiträge: 27
Registriert: Sa 10. Okt 2020, 21:54

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von cgaertner »

So, das ist jetzt die Funktion, die bei mir unter Windows und unter Linux funktioniert. Getestet mit ...

Windows:
"C:\test.txt" -> true
"C:\Users\christian\Documents\test.txt" -> true
"F:\test.txt" [SD-Karte schreibgeschützt] -> false
"F:\test.txt" [SD-Karte nicht schreibgeschützt] -> true

Linux:
"/test.txt" -> false
"/home/christian/test.txt" -> true
"/mnt/sd/test.txt" [readonly gemountet] -> false
"/mnt/sd/test.txt" [readwrite gemountet] -> true

Code: Alles auswählen

function PruefeSchreibberechtigung(strDatei: String): Boolean;
var
  hDatei: File;
 begin
  {$IFDEF WINDOWS}
  SetErrorMode(SEM_FAILCRITICALERRORS);
  {$ENDIF}
  AssignFile(hDatei, strDatei);
  {$I-}
  Rewrite(hDatei);
  {$I+}
  if (IOResult = 0) then begin
    CloseFile(hDatei);
    DeleteFile(PChar(strDatei));
    Result := true;
  end else begin
    Result := false;
  end;
end;

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von Mathias »

Hast du mal FileGetAttr angeguckt ?

https://www.freepascal.org/docs-html/rt ... tattr.html
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

cgaertner
Beiträge: 27
Registriert: Sa 10. Okt 2020, 21:54

Re: FileCreate bei schreibgeschütztem Laufwerk

Beitrag von cgaertner »

Mathias hat geschrieben:
So 25. Okt 2020, 23:16
Hast du mal FileGetAttr angeguckt ?

https://www.freepascal.org/docs-html/rt ... tattr.html
Ja, habe ich. Das funktioniert aber nur für Dateien. Wenn ich als Parameter ein Verzeichnis übergebe (also z.B. "F:\" für meine schreibgeschützte SD-Karte), dann bekomme ich nur das Flag faDirectory gesetzt zurück - d.h. es ist ein Verzeichnis, aber ich bekomme keine Aussage, ob ich dort Schreibrechte habe.

Antworten