Delphi: Überprüfen Sie, ob die Datei verwendet wird

7

Ich möchte eine Datei schreiben / löschen, aber manchmal stürze ich ab, wenn die Datei von einem anderen Programm verwendet wird. Wie überprüfe ich, ob die Datei von einem anderen Prozess geöffnet wird oder ich sie zum Schreiben öffnen kann?

    
Arthur 02.02.2009, 12:11
quelle

5 Antworten

29

Das Problem ist, dass zwischen dem Zeitpunkt, an dem Sie prüfen, ob Sie exklusiven Zugriff erhalten und die Datei öffnen können, etwas anderes exklusiven Zugriff auf die Datei erhält und Sie trotzdem die Ausnahme erhalten.

Der einzige narrensichere Weg, um zu sehen, ob Sie eine exklusive Sperre für eine Datei erhalten können, besteht darin, eine exklusive Sperre für die Datei zu erhalten, wenn Sie sie erhalten.

Wenn nicht, fangen Sie die Ausnahme und entweder

  • Mach etwas anderes
  • Warten Sie eine Weile und versuchen Sie es erneut

Es ist eine der Situationen des Lebens, wo es besser ist, um Vergebung zu bitten als um Erlaubnis:)

    
Binary Worrier 02.02.2009, 12:51
quelle
4

Es gibt eine neue Möglichkeit, den Ursprung der Dateisperrung für Vista und höher zu ermitteln: Ссылка

Benutzermodus: Die beste Möglichkeit, in eine gesperrte Datei zu schreiben, besteht darin, den Benutzer zu bitten, sie in dem anderen Prozess zu schließen. In Batch-Prozessen sollten Sie eine solche Datei ignorieren und das Problem protokollieren. Die Angabe des anderen Prozesses ist eine sehr gute Möglichkeit, eine Lösung für den Benutzer zu finden.

    
ChristianWimmer 03.01.2011 10:43
quelle
0

Sie sind sich nicht sicher, in welcher Programmiersprache Sie prüfen möchten, ob Sie in eine Datei schreiben können. In Java java.io.File.canWrite () kann die Arbeit für Sie erledigen.

Allgemein:

Unter UNIX-ähnlichen Betriebssystemen können Sie den Befehl lsof verwenden.

    
Srikanth 02.02.2009 12:14
quelle
0

Wenn Sie sehen möchten, welches Programm ein Handle für Ihre Datei enthält, verwenden Sie den Prozessmonitor (von MicroSoft herunterladen).

Dieses Tool verfügt über eine Befehlszeilenschnittstelle, sodass Sie die Skriptschnittstelle Ihrer Sprache verwenden können (z. B. java.lang.Process ), um das Tool auszuführen und eine sinnvolle Fehlermeldung anzuzeigen.

    
Aaron Digulla 02.02.2009 12:21
quelle
0

IsFileInUse wie in Ссылка

angegeben     
lakshmanaraj 02.02.2009 12:58
quelle

Tags und Links