C# 通过FileSystemWatcher减少受监视文件的数量
我的Windows服务应用程序每秒将日志写入文件夹中的文件。我想监视日志活动,如果有一段时间没有日志记录,它将发出错误信号 下面是日志文件名的示例。一次只写入最新的日志文件,不写入其他文件。Monitor应用程序只关心最后一个日志文件C# 通过FileSystemWatcher减少受监视文件的数量,c#,.net,C#,.net,我的Windows服务应用程序每秒将日志写入文件夹中的文件。我想监视日志活动,如果有一段时间没有日志记录,它将发出错误信号 下面是日志文件名的示例。一次只写入最新的日志文件,不写入其他文件。Monitor应用程序只关心最后一个日志文件 MyApplication.MachineName.2018-06-05.log MyApplication.MachineName.2018-06-04.001.log 下面是监视日志活动的代码 private void WatchFileChang
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.DocMyReport.Doc
FileSystemWatcher
对象之后更改
已开始接收事件
或如评论中所述
- 或者将日期日志放在不同的文件夹中
- 如果您使用的是日志框架,那么您的日志在当天会有不同的名称,因此它们“是”有针对性的
- 或者增加
缓冲区并监视所有内容FileSystemWatcher
这是您的任务,如果您选择接受它。您是否可以每天将日志文件写入不同的文件夹(并且一次只监视一两个文件夹)?不,这不是当前的逻辑,也不理想。