C#を使ってフォルダ内のファイル監視をしよう

アプリケーションエンジニアの山田です。
今回もまたC#のちょっとしたものの紹介をしたいと思います。
・ファイルの監視
今回はファイル、フォルダの変更を監視するコンポーネントの紹介です。
使用するものは、「System.IO.FileSystemWatcher」というクラスです。
このコンポーネントを使うことによって指定したフォルダの中で、
ファイルやフォルダの作成、変更、削除などが行われるのを監視することが出来ます。
また、ファイルの種類や、ファイルの属性のどれが変わったか、等を細かく指定することが出来ます。
簡単な使用用途としては、
このフォルダーにファイルが作成されたら、データを処理して削除、削除されたら○○を行う等、これらをトリガーにして色々なことが出来そうです。
以下サンプルコード
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //FileSystemWatcherクラスが含まれる名前空間 using System.IO; namespace FileWatcher { public partial class FileWatcherForm : Form { public FileWatcherForm() { InitializeComponent(); } FileSystemWatcher fsw = new FileSystemWatcher(); private void FileWatcher_Load(object sender, EventArgs e) { //監視対象のフォルダの設定 fsw.Path = @"c:\watch"; //監視する種類の設定 fsw.NotifyFilter = (NotifyFilters.Attributes | NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName); //サブディレクトリも監視 fsw.IncludeSubdirectories = true; //すべてのファイルを監視しているならば fsw.Filter = ""; //WindowFormなどUI用 //コンソールではいらない fsw.SynchronizingObject = this; //イベント設定 fsw.Created += fsw_Created; fsw.Changed += fsw_Changed; fsw.Deleted += fsw_Deleted; fsw.Renamed += fsw_Renamed; //監視を開始 fsw.EnableRaisingEvents = true; } /// <summary> /// 名前の変更 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void fsw_Renamed(object sender, RenamedEventArgs e) { Console.WriteLine("Renamed"); } /// <summary> /// 削除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void fsw_Deleted(object sender, FileSystemEventArgs e) { Console.WriteLine("Deleted"); } /// <summary> /// 変更 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void fsw_Changed(object sender, FileSystemEventArgs e) { Console.WriteLine("Changed"); } /// <summary> /// 作成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void fsw_Created(object sender, FileSystemEventArgs e) { Console.WriteLine("Created"); } } }
よければ参考にしてください。

株式会社ライズウィル
〒103-0013
東京都中央区日本橋人形町2-15-1
フジタ人形町ビル7F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp