FileSystemWatcher 为何偏偏对vs2013自身失效?如何解决?

phommy 2015-01-04 01:24:32
代码如下
运行起来之后,如果我用记事本编辑 c:\临时\a.txt,能捕获到改变事件;但如果我用vs编辑这个文件,就没有事件。。。



using System;
using System.IO;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var fw = new FileSystemWatcher
{
Path = "c:\\临时",
Filter = "a.txt",
NotifyFilter = NotifyFilters.LastWrite,
EnableRaisingEvents = true
};
fw.Changed += fw_Changed;

Console.Read();
}

static void fw_Changed(object sender, FileSystemEventArgs e) { Console.WriteLine(e.FullPath); }
}
}
...全文
113 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
winnowc 2015-01-04
  • 打赏
  • 举报
回复
因为vs对文件的保存很特别(应该是为了数据安全),它保存的时候: 1. 建立临时文件A,把修改的结果保存到A; 2. 建立临时文件B,把原文件内容保存到B,删除原文件; 3. 把A重命名到原文件名; 4. 删除临时文件B。 这个保存过程就没有修改原文件,所以用LastWrite监视原文件没有效果。 想要监视这个修改,根据它的步骤有多种办法。比如你监视 "a.txt*" 就会发现它修改了一个 "a.txt~xxxxxxxxx.TMP" 的文件,或者合并使用NotifyFilters.FileName,用Renamed事件能看到一个临时文件改名成a.txt,或者合并使用NotifyFilters.CreationTime,这样Changed事件也能监视到,等等。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧