【发布时间】:2011-05-19 13:34:54
【问题描述】:
问题:
是否可以检测具有打开 FileStream 的文件何时被重命名。
案例:
我正在尝试监视我们应用程序的日志,我从日志文件中读取,因为我不想干扰日志记录本身。
在文件滚动之前,这非常有效。我的应用程序一直在读取重命名的文件,甚至没有注意到。
我尝试使用 FileSystemWatcher 来检测滚动,但有时会收到很多事件,有时我不会,所以这不是一个好的解决方案(日志文件也可能驻留在网络共享可能是使用 FSW 的额外阻碍)。
如果我能找出我有一个打开句柄的文件(名称),我可以将它与_fileName 进行比较,但我不知道如何或是否可以这样做。
我还有其他选择吗?
代码:
这是我的文件监控类的简化版本:
public class MonitorFile
{
private String _fileName = String.Empty;
private bool _stopMonitoring = false;
public MonitorFile(string fileName)
{
_fileName = fileName;
}
// Simplified method
public void StartMonitoring()
{
using (var reader = new StreamReader(
new FileStream(
_monitorFileName,
FileMode.Open,
FileAccess.Read,
FileShare.Delete | FileShare.ReadWrite)))
{
while (!_stopMonitoring)
{
Thread.Sleep(500);
while ((line = reader.ReadLine()) != null)
{
//...Do stuff with the lines
}
}
}
}
}
【问题讨论】:
标签: c# .net file-io windows-services