我有一个控制台应用程序正在检查日志文件中是否有新更新的数据,如果是,则将它们复制到数据库中。
目前我正在使用FileSystemWatcher跟踪日志中的任何更改。
我想要做的是,跟踪是否创建了new
日志文件,如果是,则调用新日志文件中的myMethod()。
由于我是C#的新手,我有一个问题,应该创建第二个fileSystemWatcher,还是有办法更新当前的一个以便也包括这种情况?我已经检查了stackoverflow,虽然我在fileSystemWatcher上发现了很多帖子,但我不确定如何继续。
这是我的代码:
foreach (string path in paths)
{
if (path.Length > 0)
{
logFile.read(path, errorListAndLevel);
FileSystemWatcher logWatcher = new FileSystemWatcher();
logWatcher.Path = Path.GetDirectoryName(path);
logWatcher.Filter = Path.GetFileName(path);
logWatcher.IncludeSubdirectories = false;
logWatcher.NotifyFilter = NotifyFilters.CreationTime | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.Size;
logWatcher.Changed += new FileSystemEventHandler(delegate (object sender, FileSystemEventArgs e)
{
logFile.myMethod(errorListAndLevel, e.FullPath.ToString());
});
logWatcher.EnableRaisingEvents = true;
}
}
我想过创建一个logWatcher.Created ......但它没有用。
logWatcher.Created += new FileSystemEventHandler(delegate (object sender, FileSystemEventArgs e)
{
logFile.myMethod(errorListAndLevel, e.FullPath.ToString());
});
答案 0 :(得分:0)
问题是以下一行
logWatcher.Filter = Path.GetFileName(path);
它会过滤所有文件,只使fileWatcher
成为一个文件。现在这使得fileWatcher
不会调用事件Created
,除非第二个文件具有完全相同的名称。
当你评论该行时,它应该可以正常工作。
另外,你可以这样做:
logWatcher.Filter = "*.log";
这会根据我所看到的内容过滤所有结尾为.log
的文件。