如何更新 fileSystemWatch 以便在 C# 中查找新创建的文件?

How to update fileSystemWatch in order to find newly created file in C#?

我有一个控制台应用程序,它正在检查日志文件中是否有新更新的数据,如果是,则将它们复制到数据库中。

目前我正在使用 FileSystemWatcher 来跟踪日志中的任何更改。

我想做的是,跟踪是否创建了 new 日志文件,如果是,则在新日志文件中调用 myMethod()。 由于我是 C# 的新手,我有一个问题,是否应该创建第二个 fileSystemWatcher,或者有一种方法可以更新当前的文件系统观察器以便也包含这种情况?我已经检查了 Whosebug,虽然我在 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());
});

问题出在下面一行

logWatcher.Filter = Path.GetFileName(path);

它过滤所有文件并使 fileWatcher 只显示那个文件。现在这使得 fileWatcher 不会调用事件 Created 除非第二个将创建一个具有完全相同名称的文件。

当您评论该行时,它应该可以正常工作。

此外,您也可以这样做:

logWatcher.Filter = "*.log";

这将过滤所有以 .log 结尾的文件,这是我所看到的。