我正在尝试持续观察一个日志文件,该文件在每次更新时都被删除和重写。
我目前的方法是使用 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/