/ / C # FileSystemWatcher Dateigröße wird nur mit Windows Explorer - c #, Dateisystemwächter, Windows-Explorer aktualisiert

C # FileSystemWatcher Dateigröße wird nur mit Windows Explorer - c #, Dateisystemwächter, Windows-Explorer aktualisiert

Ich habe ein Problem mit dem FileSystemWatcher in C #. Ich sehe mir eine Datei an, die von einem anderen Programm verwendet wird. Das ist kein Problem. Das Problem ist, dass der einzige Wert, der sich mit der Datei ändert, die Größe ist. Das andere Programm schreibt die Datei, ohne das Änderungs- oder Schreibdatum zu aktualisieren. Und der Größenwert wird nur aktualisiert, wenn der Explorer (Windows 7) aktualisiert wird (F5, oder auf die Datei geklickt hat).

FileSystemWatcher fileWatcher = new FileSystemWatcher();
fileWatcher.Changed += new FileSystemEventHandler(fileWatcher_Changed);
fileWatcher.Path = Path.GetDirectoryName(path); // get directory of file path.
fileWatcher.Filter = Path.GetFileName(path); // only this file
fileWatcher.NotifyFilter = NotifyFilter.Size; // and maybe other
fileWatcher.EnableRaisingEvents = true;

private void fileWatcher_Changed(object sender, FileSystemEventArgs e)
{
// ...
}

Ich schätze, dass dieses Problem nur durch Abfragen gelöst werden kann. Weil die Datei zum Aktualisieren von Dateiinformationsdaten ausgelöst werden soll. Aber ich hoffe auf eine andere Lösung ohne Umfragen.

Über meine Bewerbung: Eine Datei lesen, die von einem anderen Programm verwendet wird. Mit FileStream FileShare.ReadWrite können Sie den Text der Datei abrufen. Es funktioniert gut. Ich möchte das Textfeld aktualisieren (Lesen der Datei), wenn die Datei geändert wurde. Aber der einzige Wert, der aktualisiert wird, während das andere Programm darauf zugreift, ist die Dateigröße. Aber nur wenn der Explorer ist erfrischend oder ich klicke auf die Datei. Dies ist das Problem dieser Frage. Wenn das Problem unlösbar ist, besteht die Alternative darin, den Dateiinhalt (Lesedatei) alle x Zeit zu aktualisieren. (Polling) ohne Dateiwächter.

Antworten:

0 für die Antwort № 1

Vielleicht würde folgendes Ihr Problem lösen und Umfragen vermeiden. Versuchen Sie es mit WMIabfragen rootcimv2 Namensraum mit etwas wie:

select filesize from "cim_datafile" where name="_your_path_"

Könnte etwas anders sein, wenn es von C # aus angewendet wird, aber in diesen Zeilen. In Bezug auf WMI gibt es viele Tutorials, wie man einen WMI-Listener in .NET initialisiert.