C#FileWatcher过滤器[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

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

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”的服务exe名称。它工作正常。

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

c# string file-watcher
1个回答
2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.