C#FileWatcher过滤器

时间:2018-03-06 11:35:13

标签: c# string file-watcher

我的服务中有一个方法,我正在观看服务配置文件。它看起来像这样:

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'在末尾。它工作正常。

为什么一个有效,另一个无效?

1 个答案:

答案 0 :(得分:2)

您应该将watcher.Filter = "*.config";用于所有配置文件,或者watcher.Filter = "yourFileName.config";用于特定文件。无需在此指定完整路径;

  

根据MSDN:   要查看所有文件中的更改,请将Filter属性设置为空   字符串(“”)。要观看特定文件,请将Filter属性设置为   文件名。例如,要监视文件MyDoc.txt中的更改,   将Filter属性设置为“MyDoc.txt”。您还可以观察更改   在某种类型的文件中。例如,要注意任何变化   文本文件,将Filter属性设置为“ .txt”。使用多个   不支持过滤器,例如“ .txt | * .doc”。