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;
}
}
为什么上面这样设置不能监听文件了??
请看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”等多个筛选器不受支持。
我用msdn的代码试了下 发现上面的代码改成NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.CreationTime | NotifyFilters.DirectoryName|NotifyFilters.FileName就可以监视文件删除了,但是没明白为什么一定要加上NotifyFilters.FileName,能讲下原因吗
还有如果不能用“*.txt|*.doc”是否就要多写几个监听对象呢,每个对象监听不同的文件类型(只能监听txt或doc)
@baoj2010:我的理解的删除文件会影响文件名,所以需要监视到FileName。从MSDN上的 NotifyFilters的枚举说明可以看出。
我对于多个文件类型的检视,是用的多个监听队形,呵呵~