出于某种原因,我的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在一个点,它将被持久化(如一个程序级变量)。
例如,将文件(单击并拖动)从桌面移动到监视位置并不会引发事件,而是复制现有文件并粘贴该文件的新副本(通过在文件系统中创建新文件而不是简单地移动现有文件)将触发Changed
事件。
watcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Size |
NotifyFilters.Security;