FileSystemWatcher meldet keine Änderungen in einer gesperrten Datei

Ich überwache einen Ordner mit einem FileSystemWatcher wie folgt:

watcher = new FileSystemWatcher(folder);
watcher.NotifyFilter = NotifyFilters.Size;
watcher.Changed += changedCallback;

Wenn ich eine neue Datei im Editor in diesem Ordner öffne und speichere, erhalte ich eine Benachrichtigung. Wenn ich weiter schreibe und dann speichere, erhalte ich eine Benachrichtigung. Wenn ich die Datei beim Speichern schließe, erhalte ich eine Benachrichtigung. Genau das, was ich wollte.

Es stellt sich jedoch heraus, dass ich, wenn ich eine Datei in diesem Ordner erstelle und den Freigabemodus auf FileShare.Read setze und dann darauf schreibe, keine Benachrichtigungen erhalte, bis die Datei geschlossen wird. Eine andere Problemumgehung besteht darin, die Datei zu öffnen (z. B. im Editor), wodurch anscheinend der Status aktualisiert wird, und dann die Benachrichtigung für meine Überwachungsanwendung erfolgt. Eine weitere Problemumgehung ist eine Aktualisierung, die ich in Windows Explorer durchführen kann, wodurch der Dateistatus erneut aktualisiert wird.

Interessanterweise bemerke ich Folgendes, wenn ich beim Vornehmen der Änderungen auf den Windows-Explorer schaue:

Wenn die Datei zum Lesen und Schreiben freigegeben ist, wird ihre Größe sofort in Windows Explorer aktualisiert, sobald ich sie speichere.Wenn die Datei nur zum Lesen freigegeben ist, wird ihre Größe im Windows-Explorer NICHT sofort aktualisiert, es sei denn, ich aktualisiere das Fenster manuell.

So scheint es, dass meine Überwachungsanwendung das gleiche Verhalten wie der Windows Explorer hat. Ich habe darüber nachgedacht, einen Thread zu starten, der nur die Dateien im Ordner scannt, aber ich frage mich, ob in diesem Fall etwas eleganteres zu tun ist.

BTW, ich verwende Win7 und bin mir nicht sicher, ob dieses Problem auch bei anderen Windows-Versionen auftritt.

Vielen Dank

BEARBEITE: Mit ReadDirectoryChanges in C ++ habe ich die gleichen genauen Ergebnisse erzielt. Die Implementierung des Threads, über den ich vorher gesprochen habe, hat auch nicht geholfen. Ich frage mich, was F5 im Windows Explorer tatsächlich tut, da dadurch die Änderung gemeldet wird.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage