7

我刚刚将 Visual Studio 升级到 2013 Ultimate 版本,我发现System.IO.FileSystemWatcher类无法观看由 Visual Studio 2013 编辑的文件。假设我有以下代码

class Program
{
    static void Main(string[] args)
    {
        var watcher = new FileSystemWatcher(@"C:\test", "*.txt");
        watcher.Changed += watcher_Changed;
        watcher.EnableRaisingEvents = true;
        Console.Read();
        watcher.Changed -= watcher_Changed;
    }

    static void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine("file is changed");
    }
}

如果我C:\test\a.txt用记事本编辑文件,程序会报告文件已更改,但如果我用 Visual Studio 2013 编辑它,我的程序会保持沉默。为什么?

4

2 回答 2

8

我注意到在 Visual Studio 2013 中编辑文件时,它会创建临时文件,然后删除原始文件并将临时文件重命名为相同的名称。因此,要捕获正常编辑,请处理System.IO.FileSystemWatcher'Changed事件,对于 Visual Studio 中的编辑,请处理该Renamed事件。

于 2013-11-21T19:26:56.150 回答
7

我已经检查了 Marcus 和 Shuping 的解决方案,但在我的情况下它们不起作用。我为解决问题所做的事情是设置:

watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.CreationTime;

在那之后Changed事件开始工作。

VS 2013 版本:12.0.30501.00 Update 2

于 2014-07-05T09:33:47.230 回答