Ich möchte wissen, ob der Benutzer unsere Java-basierte Anwendung von einem schreibgeschützten Dateisystem wie einem .dmg gestartet hat, so dass Funktionen wie automatische Aktualisierung sinnvolle Informationen anzeigen können, anstatt mit einem Fehler abzubrechen. Ich dachte zuerst, es wäre ausreichend, den Pfad von .app zu prüfen (wenn er von einer .dmg gestartet wird, ist das etwas wie /Volumes/MyApp 1.2.3/MyApp.app
, aber das funktioniert nicht, weil der Benutzer die Anwendung auf einer anderen Partition installiert hat Ich überprüfe?
Sie können auch direkt von Java aus überprüfen, ob ein bestimmter Pfad auf etwas in einem schreibgeschützten Verzeichnis verweist, indem Sie die mit Ihrem Pfad verknüpfte FileStore
abfragen:
Sie können -[NSURL getResourceValue:forKey:error:]
mit dem Schlüssel NSURLVolumeIsReadOnlyKey
verwenden. Sie würden dies auf die App-Paket-URL anwenden, die von [[NSBundle mainBundle] bundleURL]
zurückgegeben wird. Also:
Wenn OSX POSIX-kompatibel ist, können Sie statvfs()
oder fstatvfs()
verwenden, um festzustellen, ob das Dateisystem R / O eingehängt ist. struct statvfs
field f_flag
sollte ST_RDONLY
für R / O-Dateisystem gesetzt haben .
Wie in den Kommentaren darauf hingewiesen wurde, prüfen Sie, ob diese Informationen vom Betriebssystem korrekt bereitgestellt werden.
JNA und diese Frage kann für Java nützlich sein.
Einige weitere Ideen, die hier nützlich sein könnten hier ( access()
, open()
, utime()
) .
OS X spezifische statfs()
können ebenfalls verwendet werden, aber diese Funktion ist nicht portierbar (Linux und * BSD haben etwas anders statfs()
Funktionen).