为什么FileSystemWatcher不触发事件?

  • 回答 (2)
  • 关注 (0)
  • 查看 (150)

出于某种原因,我的FileSystemWatcher也不会引发任何事件。我想知道新文件何时在我的目录中被创建、删除或重命名。_myFolderPath正在正确设置,我已经检查过了。

以下是我的当前代码:

public void Setup() {
    var fileSystemWatcher = new FileSystemWatcher(_myFolderPath);
    fileSystemWatcher.NotifyFilter = NotifyFilters.LastAccess | 
      NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

    fileSystemWatcher.Changed += FileSystemWatcherChanged;
    fileSystemWatcher.Created += FileSystemWatcherChanged;
    fileSystemWatcher.Deleted += FileSystemWatcherChanged;
    fileSystemWatcher.Renamed += FileSystemWatcherChanged;

    fileSystemWatcher.Filter = "*.*";
    fileSystemWatcher.EnableRaisingEvents = true;
}

private void FileSystemWatcherChanged(object sender, FileSystemEventArgs e)
{
    MessageBox.Show("Queue changed");
    listBoxQueuedForms.Items.Clear();
    foreach (var fileInfo in Directory.GetFiles(_myFolderPath, "*.*", SearchOption.TopDirectoryOnly))
    {
        listBoxQueuedForms.Items.Add(fileInfo));
    }
}
隨心之所願隨心之所願提问于
我是飞仔白马执行力回答于
已采纳

您似乎在将FileSystemWatcher创建为安装方法中的局部变量。在方法结束时,这将超出范围,并且很可能在此时被清理,从而移除手表。

尝试创建FSW在一个点,它将被持久化(如一个程序级变量)。

liqoeiSA回答于

例如,将文件(单击并拖动)从桌面移动到监视位置并不会引发事件,而是复制现有文件并粘贴该文件的新副本(通过在文件系统中创建新文件而不是简单地移动现有文件)将触发Changed事件。

watcher.NotifyFilter = NotifyFilters.Attributes |
    NotifyFilters.CreationTime |
    NotifyFilters.FileName |
    NotifyFilters.LastAccess |
    NotifyFilters.LastWrite |
    NotifyFilters.Size |
    NotifyFilters.Security;

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • HKC

    红客学院 · 创始人 (已认证)

    26 粉丝7 提问2 回答
  • o o

    3 粉丝490 提问2 回答

扫码关注云+社区

领取腾讯云代金券