2010-07-02 19 views
7

Gibt es eine Möglichkeit festzustellen, ob eine Datei von etwas geöffnet ist, einschließlich Anwendungen, die die Datei nicht sperren (wie Notepad).Ermitteln, ob eine Datei geöffnet ist

Ich muss erkennen, wenn eine bestimmte Datei myfile.txt nicht mehr in jeder Anwendung einschließlich Notizblock geöffnet ist - so kann ich File.Open (...) mit exklusivem Testzugriff nicht verwenden, da die Datei keine Sperre hat .

+0

mögliche Duplikate von [Wie bekomme ich die Liste der geöffneten Datei-Handles nach Prozess in C#?] (Http://stackoverflow.com/questions/177146/how-do-i-get-the-list-of- open-file-handles-by-process-in-c) –

+1

Dies ist kein Duplikat. Notepad verfügt nicht über ein geöffnetes Dateihandle. –

Antwort

7

Nein. Wenn der Editor eine Datei geöffnet hat, hat er die gesamte Datei in gelesen und dann geschlossen. Daher gibt es im Betriebssystem keine Spur, die den privaten Speicher von Notepad mit der Datei auf der Festplatte verbindet.

Das Öffnen der Datei funktioniert nicht, da die Datei im Editor nicht geöffnet ist. Die Notepad-Handle-Tabelle wird nicht funktionieren, da Notepad die Datei nicht geöffnet hat.

Die einzige Möglichkeit, dies zu erkennen, besteht darin, eine nicht verwaltete DLL zu schreiben, die in jeden Prozess injiziert wird, um ihren virtuellen Speicher nach dem genauen Dateiinhalt zu durchsuchen. Nicht empfohlen.

0

Sie müssen File.Open (...) aufrufen, indem Sie die gewünschten Zugriffsflags angeben und den zurückgegebenen Wert prüfen, um festzustellen, ob die Datei geöffnet ist oder ob der Zugriff verweigert wird. Dies ist der empfohlene und sichere Weg, um auf eine Datei zuzugreifen.

Verwandte Themen