Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过FileSystemWatcher减少受监视文件的数量_C#_.net - Fatal编程技术网

C# 通过FileSystemWatcher减少受监视文件的数量

C# 通过FileSystemWatcher减少受监视文件的数量,c#,.net,C#,.net,我的Windows服务应用程序每秒将日志写入文件夹中的文件。我想监视日志活动,如果有一段时间没有日志记录,它将发出错误信号 下面是日志文件名的示例。一次只写入最新的日志文件,不写入其他文件。Monitor应用程序只关心最后一个日志文件 MyApplication.MachineName.2018-06-05.log MyApplication.MachineName.2018-06-04.001.log 下面是监视日志活动的代码 private void WatchFileChang

我的Windows服务应用程序每秒将日志写入文件夹中的文件。我想监视日志活动,如果有一段时间没有日志记录,它将发出错误信号

下面是日志文件名的示例。一次只写入最新的日志文件,不写入其他文件。Monitor应用程序只关心最后一个日志文件

MyApplication.MachineName.2018-06-05.log

MyApplication.MachineName.2018-06-04.001.log
下面是监视日志活动的代码

   private  void WatchFileChanges()
    {
        // Create a new FileSystemWatcher and set its properties.
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = @"C:\Logs";
        /* Watch for changes in LastWrite times */
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        // Only watch text files.
        watcher.Filter = "*.log";

        // Add event handlers.
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.Created += new FileSystemEventHandler(OnChanged);


        // Begin watching.
        watcher.EnableRaisingEvents = true;       

    }

    // Define the event handlers.
    private  void OnChanged(object source, FileSystemEventArgs e)
    {           
        Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);         
    }
问题:


有没有办法减少文件夹下监视的日志文件的数量?例如,只监视今天或最近两天的日志文件,而不是文件夹中的所有文件。由于内部缓冲区有限,过多的日志文件可能会导致监视无法工作。

您需要在这里发挥一些创造性,最简单的方法就是

获取或设置用于确定文件类型的筛选器字符串 在目录中监视

备注

要查看所有文件中的更改,请将筛选器属性设置为空 字符串(
“”
)。要查看特定文件,请将筛选器属性设置为 文件名。例如,要查看文件
MyDoc.txt
中的更改, 将筛选器属性设置为
“MyDoc.txt”
。你也可以观察变化 在某种类型的文件中。例如,观察任何 文本文件,将筛选器属性设置为
“*.txt”
。使用多个 不支持诸如
“*.txt |*.doc”
之类的筛选器

一些进一步的示例

  • *.*
    :所有文件(默认)。空字符串(“”)还监视所有文件

  • *.txt
    :所有扩展名为“txt”的文件

  • *recipe.doc
    :所有以“recipe”结尾并带有“doc”扩展名的文件

  • win*.xml
    :所有以“win”开头并带有“xml”扩展名的文件

  • 销售额*200?.xls

    • 符合以下条件:
      • 2001年7月销售.xls
      • 二零零二年八月十四日发售
      • 销售2004年3月.xls
    • 但不匹配:
      • 一九九九年十一月十四日发售
  • MyReport.Doc
    :仅监视MyReport.Doc

现在,有了这些信息,您可以轻松确定是否可以为当前日志创建筛选器,如果可以,则可以每天动态更改筛选器以针对这些日志。如文件中所述

过滤器属性可以在
FileSystemWatcher
对象之后更改 已开始接收事件

或如评论中所述

  • 或者将日期日志放在不同的文件夹中
  • 如果您使用的是日志框架,那么您的日志在当天会有不同的名称,因此它们“是”有针对性的
  • 或者增加
    FileSystemWatcher
    缓冲区并监视所有内容

这是您的任务,如果您选择接受它。

您是否可以每天将日志文件写入不同的文件夹(并且一次只监视一两个文件夹)?不,这不是当前的逻辑,也不理想。