У меня есть код, который использует FileSystemWatcher для мониторинга изменений файлов вне моего приложения.
В Windows 7, используя .NET 4, приведенный ниже код будет определять, когда файл был отредактирован и сохранен в приложении, таком как Блокнот, в то время как мое приложение запускалось. Однако эта логика не работает с использованием .NET 4 в Windows 8. В частности, событие FileSystemWatcher Changed никогда не срабатывает.
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!");
}
}
Я понимаю, что я могу изменить NotifyFilter, чтобы включить NotifyFilters.LastWrite, который может решить мою проблему. Тем не менее, я хочу понять , почему этот код работал в Windows 7, но теперь не удается запустить событие Changed в Windows 8. Мне также интересно узнать, есть ли способ восстановить поведение Windows 7 FileSystemWatcher при работе в Windows 8 (без изменения NotifyFilter).