我一直在尋找創建應用程序的好主意的網頁。服務或vb腳本,它們將不斷監視文件的變化。但是,我希望它在沒有更改時提醒我。我正在監視的文件是由非常重要的應用程序創建的日誌。如果該文件停止增長,那意味着應用程序出現問題,並且它已停止寫入日誌文件。監視文件的更改
有沒有人有任何想法?我已經在C#中使用FileSystemWatcher類了,但是我不知道是否有一種方法可以用來在文件沒有改變時發出警報,因爲所有事件都會看到更改。
謝謝。
我一直在尋找創建應用程序的好主意的網頁。服務或vb腳本,它們將不斷監視文件的變化。但是,我希望它在沒有更改時提醒我。我正在監視的文件是由非常重要的應用程序創建的日誌。如果該文件停止增長,那意味着應用程序出現問題,並且它已停止寫入日誌文件。監視文件的更改
有沒有人有任何想法?我已經在C#中使用FileSystemWatcher類了,但是我不知道是否有一種方法可以用來在文件沒有改變時發出警報,因爲所有事件都會看到更改。
謝謝。
只需使用上的間隔該文件應在更新觸發一個計時器。
檢查文件大小(FileInfo.Length
),如果是一樣的計時器所觸發的最後一次,它並沒有增長。
可以使用FileSytemWatcher
類:
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
更新:嗯,它支付進行到底讀的問題...你可以設置一個Timer
(ref)爲您想的不活動時間在FileSystemWatcher
事件中被提醒並重置計時器。
在這種情況下,你不需要一個觀察者,你可以使用一個計時器。每隔幾分鐘(或任何適合您的需求),檢查文件大小。將最後一個尺寸存儲在某處。下次您檢查它時,將以前的值與當前值進行比較。如果它們相同,那麼文件沒有改變,您可以發出警報。
文件大部分時間沒有變化。您需要定義一個時間段,超過該時間段,記錄過程將被視爲停止。啓動一個計時器(當它完成時)將表示記錄已停止。每次更改事件時,請重置計時器。
該文件可以每隔幾秒或幾分鐘更改一次。我正在考慮用10分鐘作爲我的時間表。 – Matt
我建議您結合您已獲得的所有答案。
使用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...
}
}
}
我喜歡定時器的想法。爲了讓它不斷運行,我需要將它創建爲服務? – Matt
@Matt - Windows服務聽起來非常適合這類任務。 – Oded
感謝您的意見。我甚至沒有想過使用計時器。 – Matt