2011-07-07 24 views
2

私は、アプリケーションの作成に関する良いアイデアをWebから探しています。サービス、またはvbスクリプトを使用して、ファイルの変更を常に監視します。しかし、私は変更がないときに私に警告する。私が監視しているファイルは、非常に重要なアプリケーションによって作成されたログです。そのファイルが成長を停止した場合、アプリケーションに何か問題があり、ログファイルへの書き込みが中止されたことを意味します。ファイルの変更を監視する

誰にもアイデアはありますか?私はC#でFileSystemWatcherクラスを使いこなしましたが、すべてのイベントが変更を見ているのでファイルが変更されないときに警告する方法があるかどうかはわかりません。

ありがとうございます。
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

更新:あなたはFileSytemWatcherクラスを使用することができます

答えて

3

ちょうどそのファイルがで更新する必要があることをインターバルに発射するタイマーを使用しています。

ファイルサイズ(FileInfo.Length)を確認し、それがタイマーを解雇前回と同じであれば、それは成長していません。

+0

私はタイマーのアイディアが好きです。それを常に稼働させるには、サービスとしてそれを作成する必要がありますか? – Matt

+0

@Matt - Windowsサービスは、この種のタスクに最適です。 – Oded

+0

ありがとうございます。私はタイマーの使用を考えていませんでした。 – Matt

1

だけでなく、それが最後まで質問を読むために支払うの...あなたがしたい非アクティブの期間(refTimerを設定することができますタイマーを通知してリセットするには、FileSystemWatcherイベントを使用します。

+0

を、私はそれを使用しているが、それはありません変更を監視しますか? – Matt

+0

ファイルが_変更されたときに起動します。 – Oded

+2

@Variant:質問を読んだことはありますか?オペレーションは明らかに彼らが 'FileSystemWatcher'を使っていることを明示しています – spender

2

この場合、ウォッチャーは必要ありません。タイマーを使用することができます。数分ごとに(または必要に応じて)ファイルサイズを確認します。最後のサイズはどこかに保管してください。次にチェックするときは、前の値と現在の値を比較します。それらが同じ場合、ファイルは変更されず、アラートを発行することができます。

2

ファイルはほとんど変更されません。ロギングプロセスが停止したと見なされる期間を定義する必要があります。完了すると、ロギングが停止したことを通知するタイマーを開始します。変更イベントがロールインするたびにタイマーをリセットしてください。

+0

ファイルは数秒または数分ごとに変更できます。私は自分の時間枠として10分を使うことを考えていました。 – Matt

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... 
     } 
    } 
} 
関連する問題