【发布时间】:2012-11-18 04:48:48
【问题描述】:
我有一些代码使用 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)。
【问题讨论】:
-
您是否一直关注本网站上发布的 Microsoft 在线支持建议?我假设您就是同一个 Craig..social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/…
-
纯文档位于此处:msdn.microsoft.com/en-us/library/… 它表明它应该在 Windows 8 中工作。有问题的文件甚至有属性吗?这似乎是一个错误。暂时你将不得不使用一种解决方法,直到它被修复。
-
根据“THERE DOCUMENTATION”有很多东西应该可以工作,但即使在 .NET 4.0 中也存在一些错误,这些错误破坏了 3.5 和 2.0 中的工作内容
-
@DJKRAZE - 我发布了该评论,因为您发布了您的评论并链接到表明已提交实际错误报告的线程。自 2012 年 11 月 25 日以来,他们一直在查看错误报告,这需要一段时间。
-
@DJKRAZE 是的,我是同一个克雷格。我在这里发帖是因为 MSDN 论坛管理员只是将我的问题添加到 Connect。虽然这很好,但 Ramhound 是正确的,我在很长一段时间内都不会收到 MS 的回复。此外,我希望 StackOverflow 上的某个人可以回答我的实际问题,这就是 为什么 Windows 8 上存在不同的行为,而不一定是如何修复它。