File.canWrite() und UAC

Guybrush Threepwood

Top Contributor
Hi,
ich bin auch nach einigem Googeln nicht zu einer Lösung folgenden Problems gekommen: Unter Vista und Win7 werden Schreibzugriffe auf das Programmverzeichnis automatisch umgeleitet (-> UAC).
Gibt es eine Möglichkeit zu testen, ob ein Nutzer in ein solchermaßen geschütztes Verzeichnis schreiben möchte? File.canWrite() gibt leider immer true zurück.

Viele Grüße und vielen Dank,
Guybrush


P.S.: Es geht nicht darum, Admin-Rechte für mein Programm anzufordern. Ich möchte schlicht verhindern, dass Nutzer in Verzeichnisse zu schreiben versuchen, für die sie keine Rechte besitzen.
 
Das OS biegt die Dateizugriffe um, die Anwendugnen bekommt davon nix mit und deswegen gibt File.canWrite() immer true zurück.

Was meinst du mit "ob ein Nutzer in ein solchermaßen geschütztes Verzeichnis schreiben möchte"?
Wenn der User das explizit will macht er eben was flasch, wenn die Anwendung das explizit will ist da der Fehler.
 
Was meinst du mit "ob ein Nutzer in ein solchermaßen geschütztes Verzeichnis schreiben möchte"?
Wenn der User das explizit will macht er eben was flasch, wenn die Anwendung das explizit will ist da der Fehler.

Danke! Es ging mir darum zu erkennen, ob ein Nutzer über einen JFileChooser ein Verzeichnis ansteuert, in das er nicht schreiben kann. Ich wollte den Nutzer vor dieser Dummheit bewahren. Aber dann ist das wohl aus Sicht des Programms nicht möglich und ich muss das dann vermutlich in der Anleitung deutlich machen.
 
Guybrush Threepwood hat gesagt.:
Danke! Es ging mir darum zu erkennen, ob ein Nutzer über einen JFileChooser ein Verzeichnis ansteuert, in das er nicht schreiben kann. Ich wollte den Nutzer vor dieser Dummheit bewahren.
Die Idee ist garnicht schlecht. Du kannst den User vor so einer Dummheit bewahren, indem Du in Deinem JFileChooser solche Verzeichnisse garnicht anzeigst. Dafür kannst Du über setFileFilter() (JFileChooser#setFileFilter (Java 2 Platform SE 5.0)) ) einen entsprechenden FileFilter setzen. Mit einem FileFilter ( FileFilter (Java 2 Platform SE 5.0)) steuerst Du mit der accept() Methode, welche Einträge angezeigt werden sollen. Prüfe dort auf File.canWrite
 
Zuletzt bearbeitet von einem Moderator:
Die Idee ist garnicht schlecht. Du kannst den User vor so einer Dummheit bewahren, indem Du in Deinem JFileChooser solche Verzeichnisse garnicht anzeigst. Dafür kannst Du über setFileFilter() (JFileChooser#setFileFilter (Java 2 Platform SE 5.0)) ) einen entsprechenden FileFilter setzen. Mit einem FileFilter ( FileFilter (Java 2 Platform SE 5.0)) steuerst Du mit der accept() Methode, welche Einträge angezeigt werden sollen. Prüfe dort auf File.canWrite

Vielen Dank für den Tipp. Ich zunächst daran gedacht, erst nach der Auswahl einer Datei einen fehler einzublenden. So geht es noch eleganter. Das Problem ist nur, dass File.canWrite auf Vista und Win7 im beschriebenen Fall immer true liefert.
 
Ich stimme maki zu, das es Aufgabe des OS ist und Java davon nichts mitkriegt.

Aber trotzdem kannst Du ja mal versuchen, nachdem Du eine Datei geschrieben hast, versuchen festzustellen ob die Datei in einem virtualisierten Ordner erscheint.
 
Das Problem ist nur, dass File.canWrite auf Vista und Win7 im beschriebenen Fall immer true liefert.
Ein FileFilter kann ja auch auf andere Sachen prüfen als canWrite(). Deinem Ideenreichtum sind da keine Grenzen gesetzt. Ich könnte mir z.B. folgendes Vorstellen
- false für alle Pfade, die mit "c:/" anfangen
- true für alle Pfade, die mit System.getProperty("user.home") anfangen
oder, oder, oder...
Du wirst ja irgendwie eine Vorstellung davon haben, was "verbotene" Verzeichnisse sind. Dann schreib den Filter halt so, dass er diese nicht anzeigt.
 

Zurück
Oben