ファイルシステムウォッチャを使ってファイルの新規作成を監視する

ファイルシステムウォッチャでファイルの新規作成を監視する方法です。

FileSystemWatcher の NotifyFilter プロパティを NotifyFilters.FileName とすることでファイル名の変更を監視します。それに加えて発生するイベントを OnCreated だけに限定することで、ファイルの新規作成だけを監視することができます。

プロパティとイベントハンドラを組み合わせるというところがミソです。

Form1 に listBox1 を配置して確認してください。Form1 の Load イベントで監視を開始して、FormClosed イベントで監視を停止します。

MyEventHandler_OnCreate はユーザーが記述するハンドラで、ここでは listBox1 に新規作成されたファイルのフルパスを追加表示します。フルパスは e.FullPath で取得します。

using System;
using System.Windows.Forms;

// ファイルシステムウォッチャを使う場合に必要.
using System.IO;

namespace aaa
{
	public partial class Form1 : Form
	{

		FileSystemWatcher Fsw;

		const String DIR_TARGET = "c:/tmp";

		public Form1()
		{

			InitializeComponent();

			// ファイルシステムウォッチャを生成する.
			Fsw = new FileSystemWatcher();

			// 監視したいディレクトリを設定する.
			// ファイル名の変更を監視する.
			// 監視対象のファイルを指定する.
			Fsw.Path = DIR_TARGET;
			Fsw.NotifyFilter = NotifyFilters.FileName;
			Fsw.Filter = "*.*";

			// 新しいファイルが作成された場合に OnCreated メソッドを呼び出す
			Fsw.Created += MyEventHandler_OnCreated;

		}

		private void Form1_Load( object sender, EventArgs e )
		{
			// 監視を開始する.
			Fsw.EnableRaisingEvents = true;

			// 新しいファイルが作成されたらリストボックスに表示する.
			listBox1.Items.Clear();
		}

		private void Form1_FormClosed( object sender, FormClosedEventArgs e )
		{
			// 監視を停止する.
			Fsw.EnableRaisingEvents = false;
		}

		// ファイルが作成されたら発生するイベント.
		private void MyEventHandler_OnCreated( object sender, FileSystemEventArgs e )
		{

			if ( listBox1.InvokeRequired )
			{
				listBox1.Invoke( new Action( () =>
				{
					listBox1.Items.Add( e.FullPath );
				} ) );
			}
			else
			{
				listBox1.Items.Add( e.FullPath );
			}

		}
	}
}