gwi*_*003 25 c# filesystemwatcher
出于某种原因,我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));
}
}
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 24
您似乎在setup方法中将FileSystemWatcher创建为局部变量.这当然会在方法结束时超出范围,并且很可能在此时进行整理,从而移除手表.
尝试在持久化的位置创建FSW(例如程序级变量)并查看是否对您进行排序.
MoM*_*oMo 24
我的问题是我期望某些行动导致FileSystemWatcher Changed事件发生.例如,将文件(单击并拖动)从桌面移动到监视位置不会引发事件,而是复制现有文件并粘贴其新副本(通过在文件系统中创建新文件而不是简单地移动现有的一个)导致Changed事件被提出.
我的解决方案是将每一个添加NotifyFilter到我的FileSystemWatcher.这样我FileSystemWatcher就可以通知我的所有情况都会收到通知.
请注意,对于特定情况,哪些过滤器会通知您,这并不完全直观/明显.例如,我预计,如果我包括在内FileName,我会收到有关现有文件名称的任何更改的通知......而不是Attributes似乎处理这种情况.
watcher.NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Size |
NotifyFilters.Security;
Run Code Online (Sandbox Code Playgroud)
使用此setter启用触发器:
watcher.EnableRaisingEvents = true;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28484 次 |
| 最近记录: |