C# 持续监视正在重新创建的文件

标签 c# file filesystemwatcher

我正在尝试持续观察一个日志文件,该文件在每次更新时都被删除和重写。

我目前的方法是使用 FileSystemWatcher。这在修改文件时效果很好,但如果我删除文件并创建一个同名的新文件,它就会停止跟踪它。

我目前的做法:

namespace LogReader
{
    class Program
    {
        static void Main(string[] args)
        {
            Watch();

            while (true)
            {

            }
        }

        public static void Watch()
        {
            var watch = new FileSystemWatcher();
            watch.Path = @"C:\TEMP\test";
            watch.Filter = "test.txt";
            watch.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite;
            watch.Changed += new FileSystemEventHandler(OnChanged);
            watch.EnableRaisingEvents = true;
        }

        private static void OnChanged(object source, FileSystemEventArgs e)
        {
            if (e.FullPath == @"C:\TEMP\test\test.txt")
            {
                Console.Clear();
                Stream stream = File.Open(@"C:\TEMP\test\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader streamReader = new StreamReader(stream);
                var lines = streamReader.ReadToEnd();
                Console.Out.WriteLine(lines);

                streamReader.Close();
                stream.Close();
            }
        }

    }
}

最佳答案

这是因为创建和删除操作不会触发 FileSystemWatcher 的 OnChanged 事件。所以你需要注册这些事件并分配相同的事件处理程序 OnChanged 它将像下面这样:

 watch.Created += new FileSystemEventHandler(OnChanged);
 watch.Deleted += new FileSystemEventHandler(OnChanged);

你可以通过This有关 FileSystemWatcher 的更多信息。

关于C# 持续监视正在重新创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37961110/

相关文章:

c# - 如何使div可见和不可见

python - 如何增加文件python中的最后一个数字

java - Java有路径连接方法吗?

c# - 当许多文件同时添加到目录时,FileSystemWatcher 无法正常工作

c# - ASP.net 通过内容页访问母版页变量

c# - .Net core 脚手架 dbcontext 失败,无法加载类型 'System.IO.File'

c# - 是否可以确定 IEnumerable<T> 是否已延迟执行挂起?

c - (高效)在 C 中将相同的数据写入多个文件

c# - 单声道下的 FileSystemWatcher - 监视子目录

powershell - 使用 System.IO.FileSystemWatcher 后使用 Powershell 循环文件