Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 监视文件的更改_C#_File_Vbscript_Monitoring - Fatal编程技术网

C# 监视文件的更改

C# 监视文件的更改,c#,file,vbscript,monitoring,C#,File,Vbscript,Monitoring,我一直在网上搜索关于创建应用程序的好主意。服务或vb脚本,它将不断监视文件的更改。但是,我希望它在没有更改时提醒我。我监视的文件是由一个非常重要的应用程序创建的日志。如果该文件停止增长,则表示应用程序有问题,并且已停止写入日志文件 有人有什么想法吗?我在C#中使用了FileSystemWatcher类,但我不知道是否有一种方法可以在文件未更改时发出警报,因为所有事件都会查看更改 谢谢。您可以使用filesystemwatcher类: 更新:嗯,把问题通读到底是值得的。。。您可以设置一个计时器(

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

有人有什么想法吗?我在C#中使用了FileSystemWatcher类,但我不知道是否有一种方法可以在文件未更改时发出警报,因为所有事件都会查看更改


谢谢。

您可以使用
filesystemwatcher
类:


更新:嗯,把问题通读到底是值得的。。。您可以设置一个
计时器
()用于在
FileSystemWatcher
事件中提醒您的非活动持续时间,并重置计时器。

在这种情况下,您不需要监视程序,可以使用计时器。每隔几分钟(或任何适合您需要的时间),检查文件大小。把最后一个尺码放在某个地方。下次检查时,将上一个值与当前值进行比较。如果它们是相同的,则文件没有更改,您可以发出警报。

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


检查文件大小(),如果它与上次启动计时器时的大小相同,则它不会增长。

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

我建议您合并所有已得到的答案

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

最简单的解决方案类似于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...
        }
    }
}

我用过它,但它会监视没有变化吗?它会在文件变化时触发,而不是在文件没有变化时触发。@Variant:你读过这个问题吗?OP明确指出,他们一直在使用
FileSystemWatcher
,在我发布文章后,我实际上一直通读到最后。。。我更新了我的答案我喜欢计时器的想法。为了让它持续运行,我需要将其创建为服务吗?@Matt-windows服务听起来非常适合此类任务。谢谢您的输入。我甚至没有想过使用计时器。文件可以每隔几秒钟或几分钟更改一次。我想用10分钟作为我的时间框架。