チュートリアル : ファイル システム イベントへの応答
更新 : 2007 年 11 月
このトピックでは、FileSystemWatcher コンポーネントを作成し、ローカル コンピュータ上のディレクトリを指定してから、Filter プロパティを使用してテキスト ファイルへの変更だけを監視する方法について説明します。Created イベントおよび Changed イベントが発生したときに応答するイベント ハンドラを作成し、フォームを使用してそれらのイベント結果の通知を表示します。
ここでは、Windows フォームおよび FileSystemWatcher コンポーネントのインスタンスを作成し、これらが連携してディレクトリ レベルのイベントに応答するようにします。
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
アプリケーションの作成
アプリケーションに必要なフォームおよびコンポーネントを作成するには
[新しいプロジェクト] ダイアログ ボックスで、Visual Basic または Visual C#Windows アプリケーションを作成し、MyWatcher と名前を付けます。
ツールボックスの [Windows フォーム] タブから、2 つの Label コントロールをデザイン画面にドラッグします。
ツールボックスの [コンポーネント] タブをクリックし、FileSystemWatcher をコンポーネントのデザイン画面にドラッグします。既定では、このコンポーネントには FileSystemWatcher1 という名前が付けられます。
ディレクトリの監視
以降では、監視対象を決定するために、コンポーネントにいくつかのプロパティを設定します。これらの設定により、コンポーネントはローカル コンピュータ上の指定されたディレクトリで拡張子が .txt のファイルの作成を監視するようになります。
FileSystemWatcher コンポーネントのプロパティを設定するには
前の手順で作成した FileSystemWatcher コンポーネントをクリックし、[プロパティ] ウィンドウでそのプロパティを表示します。
コンポーネントの名前を myWatcher に設定します。
Path プロパティを使用して、FileSystemWatcher コンポーネントがローカル コンピュータ上の特定のディレクトリを監視するように設定します。たとえば、Microsoft Windows 2000 が動作しているコンピュータの場合は、Path プロパティに次のように入力して、コンポーネントが My Documents ディレクトリを監視するように設定できます。
C:\Documents and Settings\yourusername\My Documents\
ヒント : この例の目的を達成するためには、ローカル コンピュータの任意のディレクトリを使用できます。
Filter プロパティを *.txt に設定して、コンポーネントが拡張子 .txt で終わるファイルだけを監視するようにします。
発生したイベントの処理
ここでは、コンポーネントに対して 2 つのイベント ハンドラを定義します。これらのイベント ハンドラは、Changed イベントおよび Created イベントが発生したときに実行する処理を定義します。
コンポーネントを設定するには
FileSystemWatcher コンポーネントをダブルクリックします。コード エディタに、Changed イベントに対する既定のイベント ハンドラが表示されます。
メモ : 詳細については、「Windows フォーム内でのイベント ハンドラの作成」を参照してください。
次のコードを使用して、イベントが発生したことを確認する単純なテキスト文字列を表示します。
Private Sub myWatcher_Changed(ByVal sender As System.Object, _ ByVal e As System.IO.FileSystemEventArgs) Handles myWatcher.Changed Me.Label1.Text = "Changes made to: " & e.FullPath End Sub
private void myWatcher_Changed(object sender, System.IO.FileSystemEventArgs e) { label1.Text = "Changes made to: " + e.FullPath; }
Created イベントに対して、コンポーネントでこのイベントが発生したときにアプリケーションが実行する処理を指定するイベント ハンドラを作成します。イベンド ハンドラの作成方法の詳細については、「方法 : デザイナを使用してイベント ハンドラを作成する」を参照してください。新しく作成したファイルの絶対パスを表示するために、次のコードを追加します。ここまでの作業を終えると、コードは次のようになります。
Private Sub myWatcher_Created(ByVal sender As System.Object, _ ByVal e As System.IO.FileSystemEventArgs) Handles myWatcher.Created Me.Label2.Text = "The file: " & e.FullPath & _ " has been added to your directory" End Sub
private void myWatcher_Created(object sender, System.IO.FileSystemEventArgs e) { label2.Text = "The file: " + e.FullPath + " has been added to your directory."; }
すべてのファイルを保存します。次に、アプリケーションをビルドして、実行します。
コンポーネントのテスト
ここでは、コンポーネントが監視しているディレクトリに手動で変更を加えて、イベント ハンドラが Changed イベントおよび Created イベントを引き起こすようにします。
FileSystemWatcher コンポーネントをテストするには
前の手順で作成したアプリケーションを実行します。
Windows エクスプローラを使用して、FileSystemWatcher コンポーネントが監視するように設定したディレクトリを探します。
メモ帳を起動し、新しいテキスト ファイルを作成します。このファイルを手順 2. で指定したディレクトリに保存し、ファイルを閉じます。
メモ : フォームに戻ります。作成メッセージがラベルに表示されます。
作成したテキスト ファイルを開き、数行のテキストを入力し、もう一度保存します。
メモ : これにより、Changed イベントが発生し、定義したハンドラが実行されます。
フォームに戻ります。変更メッセージがラベルに表示されます。
参照
処理手順
方法 : FileSystemWatcher コンポーネントのインスタンスを作成する