首页 新闻 会员 周边

FileSystemWatcher为什么不能监听文件删除

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-20 21:27

private void CreateWorkerConfigDog()
{
//文件夹被删除的情况下就不再往下建监视了
if (!Directory.Exists(PathUtil.GetFullFilePath(ConfigurationHelper.GetAppSetting("ServiceWorkerConfigPath"))))
{
return;
}
if (_workerConfigDog == null)
{
_workerConfigDog = new FileSystemWatcher
{
Path = PathUtil.GetFullFilePath(ConfigurationHelper.GetAppSetting("ServiceWorkerConfigPath")),
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.CreationTime | NotifyFilters.DirectoryName,
Filter = "ServiceWorker.config",
EnableRaisingEvents = true
};
_workerConfigDog.Changed += WatchHandler;//一个是更新watchers一个是根据workerconfig更新服务状态
_workerConfigDog.Changed += UpdateWatcher;
_workerConfigDog.Deleted += DisposeDomainWatcher;
}

}

各位大侠能否解决一下,上面代码有什么问题?Changed可以实现但是Deleted就是不能触发DisposeDomainWatcher,什么原因?

问题补充:

private void CreateWorkerConfigDog()
{
//文件夹被删除的情况下就不再往下建监视了
if (!Directory.Exists(PathUtil.GetFullFilePath(ConfigurationHelper.GetAppSetting("ServiceWorkerConfigPath"))))
{
return;
}
if (_workerConfigDog == null)
{
_workerConfigDog = new FileSystemWatcher
{
Path = PathUtil.GetFullFilePath(ConfigurationHelper.GetAppSetting("ServiceWorkerConfigPath")),
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.CreationTime | NotifyFilters.DirectoryName,
Filter = "*.config|*.dll",
EnableRaisingEvents = true
};
_workerConfigDog.Changed += WatchHandler;//一个是更新watchers一个是根据workerconfig更新服务状态
_workerConfigDog.Changed += UpdateWatcher;
//_workerConfigDog.Deleted += DisposeAll;
_workerConfigDog.Deleted += DisposeDomainWatcher;
}

}

为什么上面这样设置不能监听文件了??

baoj2010的主页 baoj2010 | 初学一级 | 园豆:102
提问于:2014-01-20 18:25
< >
分享
最佳答案
0

请看MSDN的解释。http://msdn.microsoft.com/zh-cn/library/system.io.filesystemwatcher.filter(v=vs.110).aspx

若要监视所有文件中的更改,请将 Filter 属性设置为空字符串 ("")。 若要监视特定的文件,请将 Filter 属性设置为该文件名。 例如,若要监视文件 MyDoc.txt 中的更改,请将Filter 属性设置为“MyDoc.txt”。 也可以监视特定类型文件中的更改。 例如,若要监视任何文本文件中的更改,请将 Filter 属性设置为“*.txt”。 使用“*.txt|*.doc”等多个筛选器不受支持。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2014-01-20 18:52

我用msdn的代码试了下 发现上面的代码改成NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.CreationTime | NotifyFilters.DirectoryName|NotifyFilters.FileName就可以监视文件删除了,但是没明白为什么一定要加上NotifyFilters.FileName,能讲下原因吗

baoj2010 | 园豆:102 (初学一级) | 2014-01-20 21:02

还有如果不能用“*.txt|*.doc”是否就要多写几个监听对象呢,每个对象监听不同的文件类型(只能监听txt或doc)

baoj2010 | 园豆:102 (初学一级) | 2014-01-20 21:04

@baoj2010:我的理解的删除文件会影响文件名,所以需要监视到FileName。从MSDN上的 NotifyFilters的枚举说明可以看出。

我对于多个文件类型的检视,是用的多个监听队形,呵呵~

幻天芒 | 园豆:37175 (高人七级) | 2014-01-20 21:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册