FileSystemWatcher的Changed事件不触发。

3
FileSystemWatcher fsw = new FileSystemWatcher();
fsw.Path = @"C:\foo.txt";
fsw.Changed += new FileSystemEventHandler(LogFileChanged);

private void LogFileChanged(object s, FileSystemEventArgs e)
{ 

}

如果我在 LogFileChanged() 中设置断点 -> 打开并编辑 foo.txt -> 保存文件,断点不会被触发。有人能解释一下我错过了什么吗?

断点在哪里? - Davin Tryon
@dtryon 在 LogFileChanged 方法中 - Johan
你尝试过添加 System.Diagnostics.Debugger.Launch(); 而不是断点吗?这样至少可以证明这不是一个附件问题。 - Davin Tryon
1
一个好的文本编辑器永远不会更改文件,因为那可能会导致不可恢复的数据丢失。相反,它会写入一个新文件,重命名旧文件,将新文件重命名为旧文件名并删除旧文件。没有更改事件。 - Hans Passant
顺便提一下,你的LogFileChanged()方法不应该是static的吗?因为如果没有定义它的类对象,你无法从FileSystemEventHandler中访问它。 - Soner Gönül
你是否百分之百确定存在变更事件?考虑编写测试程序,明确地打开->保存->关闭(而不是新建->保存->删除旧文件/重命名新文件序列)。 - Alexei Levenkov
2个回答

8
这是一个文件而不是路径。
fsw.Path = @"C:\foo.txt";

您需要设置。
fsw.Path = @"C:\";
fsw.Filter = "foo.txt";

Filter Property


2
你设置了这个属性吗?
 fsw.EnableRaisingEvents = true;

1
是的,我刚刚添加了那个,恐怕没有帮助。 - Johan
这并没有提供问题的答案。如果您想对作者进行批评或请求澄清,请在他们的帖子下留言。 - durron597
2
@durron597 这是一个答案。 - Daniel A. White

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接