我的服务中有一个方法,我正在观看服务配置文件。它看起来像这样:
private void WatchConfigurationFile()
{
var fileLocation = Assembly.GetExecutingAssembly().Location;
watcher.Path = Path.GetDirectoryName(fileLocation);
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = fileLocation + ".config";
watcher.Changed += new FileSystemEventHandler(OnConfigChange);
watcher.EnableRaisingEvents = true;
Log.DebugFormat("config location: {0}", watcher.Filter.ToString());
}
日志返回目标文件的完整文件路径位置,包括存储位置:C /用户等等
然而,当我更新配置文件时,更改不会显示在我的日志文件中。记录如下:
private void OnConfigChange(object source, FileSystemEventArgs e)
{
ConfigurationManager.RefreshSection("appSettings");
Log.DebugFormat("Updated ConnectionString: {0}", ConfigurationManager.AppSettings["dbConn"]);
}
但是在我的文件观察器类中,如果我将过滤器更改为文件的实际名称,在我的情况下,使用' .config'在末尾。它工作正常。
为什么一个有效,另一个无效?
答案 0 :(得分:2)
您应该将watcher.Filter = "*.config";
用于所有配置文件,或者watcher.Filter = "yourFileName.config";
用于特定文件。无需在此指定完整路径;
根据MSDN: 要查看所有文件中的更改,请将Filter属性设置为空 字符串(“”)。要观看特定文件,请将Filter属性设置为 文件名。例如,要监视文件MyDoc.txt中的更改, 将Filter属性设置为“MyDoc.txt”。您还可以观察更改 在某种类型的文件中。例如,要注意任何变化 文本文件,将Filter属性设置为“ .txt”。使用多个 不支持过滤器,例如“ .txt | * .doc”。