我一直在网上搜索有关创建应用程序的好主意。服务或将持续监视文件以进行更改的vb脚本。但是,我希望它在没有任何变化时提醒我。我监控的文件是由非常重要的应用程序创建的日志。如果该文件停止增长,则表示应用程序出现问题,并且已停止写入日志文件。
有没有人有任何想法?我已经在C#中使用了FileSystemWatcher类,但我不知道是否有一种方法可以用来在文件没有改变时发出警报,因为所有事件都会看到变化。
谢谢。
答案 0 :(得分:3)
只需使用一个计时器,该计时器会在应该更新该文件的时间间隔内触发。
检查文件大小(FileInfo.Length
),如果它与上次定时器触发的时间相同,则不会增长。
答案 1 :(得分:2)
在这种情况下,您不需要观察者,您可以使用计时器。每隔几分钟(或根据您的需要),检查文件大小。将最后一个尺寸存储在某处。下次检查时,将先前的值与当前值进行比较。如果它们相同,则文件没有更改,您可以发出警报。
答案 2 :(得分:2)
文件大部分时间都不会更改。您需要定义一个时间段,超过该时间段,认为日志记录过程已停止。启动一个计时器(当它完成时)将发出记录已停止的信号。每次更改事件时,都会重置计时器。
答案 3 :(得分:1)
您可以使用FileSytemWatcher
课程:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
更新:嗯,直到最后才能阅读问题...您可以设置一个Timer
(ref)表示您想要提醒的不活动时间并重置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...
}
}
}