2012-08-17 15 views
8

ファイルサイズの変更を監視するプログラムを作成する必要があります。私はすでにシンプルなWindowsサービスとファイルシステムウォッチャーを作ったので、私は今コンセプトに慣れています。また、ファイルサイズを確認するコードを作成しました(フォームボタンで作成しましたが、まだファイルシステムウォッチャーに実装していません)。ファイルサイズを監視するファイルウォッチャーを持つWindowsサービスを作成するにはどうすればよいですか?ファイルシステムウォッチャーをWindowsサービスの中に入れ、OnStartメソッド経由でウォッチャーを呼び出す必要がありますか?C#のFileSystemWatcherを使用したWindowsサービス

答えて

14

ウィンドウのサービスを作成している場合は、プログラムでそれを行うことができます。私は通常、フォームを自分のサービスから外し、コミュニケーションのために別のインターフェースを作ります。現在、FileSystemWatcherにはサイズだけを監視するイベントはありません。そのため、FileSystemWatcher.Changedと結びついたメソッドを作成して、既存のファイルの変更を確認する必要があります。 OnStartメソッドでコントロールを宣言して初期化し、イベントを連結します。 OnStopメソッドでクリーンアップコードを実行します。それはこのようなものになります。

protected override void OnStart(string[] args) 
{ 
FileSystemWatcher Watcher = new FileSystemWatcher("PATH HERE"); 
Watcher.EnableRaisingEvents = true; 
Watcher.Changed += new FileSystemEventHandler(Watcher_Changed); 
} 

// This event is raised when a file is changed 
private void Watcher_Changed(object sender, FileSystemEventArgs e) 
{ 
// your code here 
} 

をまたFileSystemWatcherは、単一のファイルに対して複数のイベントをオフに起動しますので、あなたはそれを回避するためのパターンのための時計をデバッグしているとき、注意してください。

+0

サービスウィンドウのツールボックスから項目を追加しないでください。ありがとう!私はそれをできるだけ試してみる...それは本当に有用だった –

+0

私はそれから離れていただろう。サービスを実行していると、Windowsはフォームの統合を不可能にするので、インストール後にサービスを構成して許可する必要があります。あなたの目だけが見るものなら、それはおそらく大きな問題ではありませんが、(セキュリティ上の理由から)そのような開発スタイルを避けることは良い習慣です。 –

+1

更新:Windows VistaおよびWindows 7では、デスクトップ対話を許可するオプションが完全に削除されました。投稿時にこれを知らなかった。 –

3

あなたは、単にイベントを処理次に

EnableRaisingEvents = true; 

を設定することにより、OnStartメソッドの方法であなたのfilesystemwatcherオブジェクトを有効にすることができます。それはそれを行う必要があります。あなたは

myWatcher.Changed += new FileSystemHandler(FSWatcherTest_Changed); 

private void FSWatcherTest_Changed(object sender, 
       System.IO.FileSystemEventArgs e) 
{ 
    //code here for newly changed file or directory 
} 

そしてそうのように変更されたものを処理するためのデリゲートを作成することができます

+0

デフォルト値は本当でしょう – Peru

+1

たぶん。 [MSDN](http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.enableraisingevents.aspx) - コンポーネントが有効な場合はtrue、それ以外の場合はfalse、既定値はfalseです。 Visual Studio 2005でデザイナのコンポーネントを使用している場合、デフォルトはtrueです。 " –

関連する問題