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

时间:2015-10-13 14:27:32

标签: c# .net filesystemwatcher

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

目前我正在使用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());
});

1 个答案:

答案 0 :(得分:0)

问题是以下一行

logWatcher.Filter = Path.GetFileName(path);

它会过滤所有文件,只使fileWatcher成为一个文件。现在这使得fileWatcher不会调用事件Created,除非第二个文件具有完全相同的名称。

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

另外,你可以这样做:

logWatcher.Filter = "*.log";

这会根据我所看到的内容过滤所有结尾为.log的文件。