Laden...

Gibt es eine Möglichkeit über C# herauzufinden, welcher Prozess eine Datei sperrt?

Erstellt von thore.fiedermann vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.467 Views
thore.fiedermann Themenstarter:in
30 Beiträge seit 2007
vor 4 Jahren
Gibt es eine Möglichkeit über C# herauzufinden, welcher Prozess eine Datei sperrt?

Guten Morgen

Kurze Beschreibung vorweg:
Ich habe zwei Prozesse, die Informationen über eine Dateischnittstelle austauschen.
Prozess1: Der schreibt die Datei. Diesen Prozess kann/darf ich nicht verändern. Der ist so, wie er ist.
Prozess2: Mein C#-Prozess. Der lauscht auf den Ordner und wird benachrichtigt, wenn die Datei erzeugt wird. Dann nimmt er diese Datei und benennt sie um (damit neue Daten gesendet werden können), liest sie aus und löscht sie danach.
Es handelt sich immer nur um eine Datei von wenigen kB an Daten. Nichts desto trotz, ist es möglich, dass die Datei noch gesperrt ist, wenn Prozess2 darauf zugreifen will. Dafür habe ich einfach eine Schleife eingebaut, die die Datei 5 mal in einem Abstand von 0,5 Sekunden umbenennen möchte. Das langt eigentlich immer.

**Das Problem: **
Ich habe eine System, wo dieser Zugriff immer wieder misslingt. Ich weiß aber nicht welcher Prozess, diese Datei sperrt. Prozess1 ist eigentlich unverdächtig. Normalerweise funktioniert die Kommunikation so. Ein Virenscanner wurde bereits deaktiviert und kann damit ausgeschlossen werden.
Über den Recourcenmonitor von Windows bin ich zu langsam.
Gibt es eine Möglichkeit über C# herauzufinden, welcher Prozess eine Datei sperrt? Oder über die Konsole (Eine Batchdatei könnte ich anstoßen).

Ich hoffe ich konnte mein Problem genau genug beschreiben, sonst fragt gerne nach.

Gruß Thore

PS: Im Forum und im Internet bin ich nicht fündig geworden "Datei gesperrt", "Dateizugriff", "Wer greift auf meine Datei zu?", "c# zur laufzeit herausfinden, welcher prozess eine datei gesperrt hat", "c# datei gesperrt herausfinden von wem", "Dateizugriff verweigert"

709 Beiträge seit 2008
vor 4 Jahren

Guten Morgen Thore,

hier sind einige Antworten zu dem Thema zu finden: How do I find out which process is locking a file using .NET?

Gruß
Micha

4.931 Beiträge seit 2008
vor 4 Jahren

Du solltest gleich mit englischen Begriffen suchen, z.B. "windows detect file locks".
Daher sollte dir Find out which process is locking a file or folder in Windows weiterhelfen (falls du ein Programm dort installieren darfst: "Process Explorer", sonst evtl. das Powershell-Skript).

Edit: Hier direkt der Link zu den Sysinternals Process Utilities.