我编写了一个测试应用程序来试用msdn中的FileSystemWatcher示例代码。
它基本上可以工作,但处理程序被调用三次。有人知道为什么吗?
namespace FileWatcherTest
{
public partial class Form1 : Form
{
private FileSystemWatcher watcher;
public Form1()
{
InitializeComponent();
string testPath =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
+ @"\Test";
InitialiseFileWatcher(testPath, "example.txt");
}
private void InitialiseFileWatcher(string path, string fileName)
{
watcher = new FileSystemWatcher();
watcher.Path = path;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = fileName;
watcher.Changed += new FileSystemEventHandler(OnFarmListChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
private static void OnFarmListChanged(object source, FileSystemEventArgs e)
{
string text = "File: " + e.FullPath + " " + e.ChangeType;
MessageBox.Show(text);
}
}
}
答案 0 :(得分:1)
作为您所包含链接中文档的一部分:
通用文件系统操作可能会引发多个事件。例如,当文件从一个目录移动到另一个目录时,可能会引发几个OnChanged和一些OnCreated和OnDeleted事件。移动文件是一项复杂的操作,由多个简单操作组成,因此可以引发多个事件。同样,某些应用程序(例如,防病毒软件)可能会导致FileSystemWatcher检测到其他文件系统事件。