【问题标题】:C# FileWatcher filter [duplicate]C# FileWatcher 过滤器 [重复]
【发布时间】:2018-03-06 19:38:42
【问题描述】:

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

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/Users等

然而,当我更新我的配置文件时,更改不会显示在我的日志文件中。日志记录是这样完成的:

private void OnConfigChange(object source, FileSystemEventArgs e)
{
    ConfigurationManager.RefreshSection("appSettings");
    Log.DebugFormat("Updated ConnectionString: {0}", ConfigurationManager.AppSettings["dbConn"]);
}  

但是,在我的文件观察程序类中,如果我将过滤器更改为文件的实际名称,在我的情况下,它是服务 exe 名称,末尾带有“.config”。它工作正常。

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

【问题讨论】:

  • 可能是 (app_name).vshost.exe.config 也需要更新?

标签: c# string file-watcher


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 2012-02-27
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多