J'ai un code qui utilise FileSystemWatcher pour surveiller les modifications de fichiers à l'extérieur de mon application.
Sur Windows 7, l'utilisation .NET 4, le code ci-dessous permettrait de détecter lorsqu'un fichier a été modifié et enregistré dans une application comme le bloc-notes, tandis que mon application est en cours d'exécution. Cependant, cette logique ne fonctionne pas à l'aide .NET 4 sur Windows 8. Plus précisément, le FileSystemWatcher a Changé événement se déclenche jamais.
public static void Main(string[] args)
{
const string FilePath = @"C:\users\craig\desktop\notes.txt";
if (File.Exists(FilePath))
{
Console.WriteLine("Test file exists.");
}
var fsw = new FileSystemWatcher();
fsw.NotifyFilter = NotifyFilters.Attributes;
fsw.Path = Path.GetDirectoryName(FilePath);
fsw.Filter = Path.GetFileName(FilePath);
fsw.Changed += OnFileChanged;
fsw.EnableRaisingEvents = true;
// Block exiting.
Console.ReadLine();
}
private static void OnFileChanged(object sender, FileSystemEventArgs e)
{
if (File.Exists(e.FullPath))
{
Console.WriteLine("File change reported!");
}
}
Je comprends que je peux modifier le NotifyFilter d'inclure également NotifyFilters.LastWrite, qui peut résoudre mon problème. Cependant, je veux comprendre pourquoi ce code fonctionnait sur Windows 7, mais est incapable de le feu de l'événement a Changé sur Windows 8. Je suis aussi curieux de savoir si il existe un moyen de restaurer mon Windows 7 FileSystemWatcher comportement lors de l'exécution dans Windows 8 (sans modification de la NotifyFilter).