C# 实现 Tail -f 命令






3.73/5 (3投票s)
除非我误解了你在 CodePlex 上的代码,看起来你的工具每次文件更改时都会加载整个文件。对于小文件来说这可能没问题,但对于较大的文件(例如几兆字节)来说,性能会受到严重影响。为什么不采取更简单的方法呢?using (FileStream str...
除非我误解了你在 CodePlex 上的代码,看起来你的工具每次文件更改时都会加载整个文件。对于小文件来说这可能没问题,但对于较大的文件(例如几兆字节)来说,性能会受到严重影响。为什么不采取更简单的方法呢?
using (FileStream str = new FileStream(f, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
我用一个快速的控制台应用程序进行了测试……你可以从外部向文件写入,没有任何问题。你可以重命名它,C# 代码仍然可以正常工作。你可以尝试删除它,但它实际上不会消失,直到 FileStream
关闭(并且后续尝试对其进行操作将会失败)。对于滚动日志的情况,这似乎是可以接受的。使用这种方法,你可以跟踪你在文件中的位置,并观察流的长度是否大于你当前的位置。你仍然可以使用 FileSystemWatcher
来捕获重命名事件,关闭你的 stream
,并等待一个具有原始名称的新文件。该工具可见的功能(参数、string
匹配等)仍然非常有用……只需要调整内部实现即可。