监视文件以进行更改

时间:2011-07-07 20:54:01

标签: c# file vbscript monitoring

我一直在网上搜索有关创建应用程序的好主意。服务或将持续监视文件以进行更改的vb脚本。但是,我希望它在没有任何变化时提醒我。我监控的文件是由非常重要的应用程序创建的日志。如果该文件停止增长,则表示应用程序出现问题,并且已停止写入日志文件。

有没有人有任何想法?我已经在C#中使用了FileSystemWatcher类,但我不知道是否有一种方法可以用来在文件没有改变时发出警报,因为所有事件都会看到变化。

谢谢。

5 个答案:

答案 0 :(得分:3)

只需使用一个计时器,该计时器会在应该更新该文件的时间间隔内触发。

检查文件大小(FileInfo.Length),如果它与上次定时器触发的时间相同,则不会增长。

答案 1 :(得分:2)

在这种情况下,您不需要观察者,您可以使用计时器。每隔几分钟(或根据您的需要),检查文件大小。将最后一个尺寸存储在某处。下次检查时,将先前的值与当前值进行比较。如果它们相同,则文件没有更改,您可以发出警报。

答案 2 :(得分:2)

文件大部分时间都不会更改。您需要定义一个时间段,超过该时间段,认为日志记录过程已停止。启动一个计时器(当它完成时)将发出记录已停止的信号。每次更改事件时,都会重置计时器。

答案 3 :(得分:1)

您可以使用FileSytemWatcher课程:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

更新:嗯,直到最后才能阅读问题...您可以设置一个Timerref)表示您想要提醒的不活动时间并重置FileSystemWatcher事件中的计时器。

答案 4 :(得分:0)

我建议你把你已经得到的所有答案结合起来。

使用FileSytemWatcher类来监视更改并使用计时器等待一段时间自上次更改

最简单的解决方案看起来像ManualResetEvent和DateTime变量(不要忘记内存障碍)和后台线程。

所以,你会有这样的事情:

DateTime _lastChangeTime;
ManualResetEvent _exitEvent; // set this event to exit thread.

private void Watcher_Change(...)
{
    _lastChangeTime = DateTime.UtcNow;
    Thread.MemoryBarrier();
}


private void ThreadProc()
{
    while (_exitEvent.Wait(1000)) // every second
    {
        Thread.MemoryBarrier();

        if (DateTime.UtcNow.Subtract(lastChangeTime) > [some reasonable time])
        {
            // shit happens...
        }
    }
}