我有一些代码使用 FileSystemWatcher 来监视我的应用程序之外的文件更改。
在 Windows 7 上,使用 .NET 4,下面的代码将在我的应用程序运行时检测文件何时被编辑并保存在记事本等应用程序中。但是,此逻辑在 Windows 8 上使用 .NET 4 时不起作用。具体而言,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 上有效,但现在无法在 Windows 8 上触发 Changed 事件。我也很想知道在 Windows 8 中运行时是否有办法恢复我的 Windows 7 FileSystemWatcher 行为(不更改 NotifyFilter)。