Datei löschen - Rechte abfragen?

Dominik Wolf

Grünschnabel
Hallo, ich bin entweder zu blöd zum suchen (wahrscheinlich) oder es hatte noch keiner mein Problem (unwahrscheinlich):

Ich möchte während mit meinem Programm diverse Dateien löschen - diese sind kurz vor dem Löschversuch und manchmal auch während des Löschversuches noch in Benutzung.

Aktuell löse ich das Problem durch warten und wiederholtes Versuchen, die Datei zu löschen.
file.canWrite() Rechte habe ich immer, sowohl für die Datei, als auch das Verzeichnis.
Trotzdem kann ich die Datei manchmal nicht löschen - daraus schließe ich, dass Schreibrechte auf Datei und Verzeichnis nicht genügen um eine Datei zu löschen.

Welche Rechte brauche ich? Kann ich erst rausfinden, ob ich eine Datei löschen kann, wenn ich es versuche?!

Ich bin dankbar für jeden Hinweis,

MfG DW
 
Moin,

also wenn ich Dich richtig verstanden habe, helfen Dir auch keine weiteren Rechte.

Wenn eine Datei von einem Programm genutzt wird (bspw. ein Word-Dokument ist mit Word geöffnet), dann kannst Du sie nicht löschen rsp. erst, wenn sie dort geschlossen wird.
Das würde auch im Windows-Explorer nicht gehen !

Ergo wirst Du warten (oder die entsprechende Anwendung abschießen:rolleyes:) müssen ....

Gruß
Klaus
 
Ich möchte den Befehl file.delete() nach Möglichkeit nur dann absetzen, wenn zu erwarten ist, dass es rein Zugriffstechnisch funktioniert.
 
Moin,

ich denke mal dass das schwierig wird - wüsste nicht, wie Du das abfragen kannst (von Plattformunabhängigkeit mal ganz abgesehen).
Theoretisch könntest natürlich versuchen, die Datei mit "renameTo" umzubenennen und dann, falls das klappte, die umbenannte Datei zu löschen.

Ist aber auch irgendwie das Gleiche, oder ?
Sehe darin auch keine wirklichen Sinn. Wenn das File nicht gelöscht werden, dann ist es halt so .....

Gruß
Klaus
 
renameTo würde das ganze nicht besser machen, das stimmt :)
Dann werde ichs eben wie jetzt lösen müssen und warten bis die Datei gelöscht werden kann (ist leider für den weiteren Programmverlauf notwendig) - ich hatte nur auf eine elegantere Lösung als:
wait and hope
gehofft.

Danke trotzdem!
 
Hallo,

aus dem Bauch heraus würde ich es mal damit versuchen:
Java:
...
//check file permissions
//...

//check file "availability"
File file = new File("C:/file/to/be/deleted");
boolean canDeleteFile = false;
try(FileChannel channel = new RandomAccessFile(file, "rw").getChannel()){
	try(FileLock lock = channel.tryLock()){ //or lock() if you want to block...
		if(lock != null){
			//we have access and no one else (at least right now :) -> mark file for deletion ...
			canDeleteFile = true;
		}
	} // lock.release(); invoked by try with resource (iif lock != null)
} //channel.close() invoked by try with resource

if(canDeleteFile){
	file.delete();
}
...

Gruß Tom
 
Zurück