Delphi: Prüfen, ob Datei in Benutzung ist
Möchte ich schreiben/löschen eine Datei, aber manchmal bekomme ich einen Absturz, wenn die Datei von einem anderen Programm verwendet. Wie kann ich überprüfen, um zu sehen, ob die Datei von einem anderen Prozess geöffnet oder ich kann Sie öffnen zum schreiben?
- Es wäre informativ, Liste, was OS und Programmiersprache, die Sie verwenden.
- +1 Andy. Arthur, bitte erwähnen Sie die Programmiersprache oder Betriebssystem in den tags oder in der Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass zwischen der Zeit, die Sie überprüfen, um zu sehen, wenn Sie sich exklusiven Zugriff und das öffnen der Datei, etwas anderes bekommt exklusiven Zugriff auf die Datei, und Sie erhalten die Ausnahme sowieso.
Nur Narr Beweis Weg, um zu sehen, wenn Sie eine exklusive Sperre für eine Datei ist, um zu versuchen und erhalten Sie einen exklusiven lock auf die Datei, wenn Sie es bekommen, Sie haben es.
Wenn nicht, fangen Sie die Ausnahme, und entweder
Es ist eine, die das Leben Situationen, in denen ist es besser, um Vergebung zu bitten als Erlaubnis 🙂
Es ist ein neuer Weg, um den Ursprung der Datei zu sperren für Vista und bis hier:
http://www.remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/
UserMode:
Der beste Weg, um zu schreiben, um eine Datei gesperrt ist, um den Benutzer zu Fragen, um es zu schließen in dem anderen Prozess. In batch-Prozesse, sollten Sie ignorieren eine solche Datei, und melden Sie das problem. Der Angabe des namens des anderen Prozesses ist ein sehr guter Weg, um eine Lösung zu finden für den Nutzer.
Nicht sicher, in welcher Programmiersprache Sie möchten, um zu überprüfen, ob Sie können eine Datei schreiben. In Java, java.io.Datei.canWrite() kann der job für Sie tun.
Allgemein:
In UNIX-wie OS, die Sie verwenden können, die lsof Befehl.
Wenn Sie möchten, um zu sehen, welche das Programm besitzt einen Griff zu Ihrer Datei verwenden Sie die Process Monitor (download von MicroSoft).
Dieses tool bietet eine Kommandozeilen-Schnittstelle, so könnten Sie Ihre Sprache scripting-Schnittstelle (zum Beispiel
java.lang.Process
), um das tool ausführen und anzeigen eine nützliche Fehlermeldung.IsFileInUse wie in http://delphi.about.com/cs/adptips1999/a/bltip0999_3.htm