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


c-sharp2

アプリケーションエンジニアの山田です。
今回もまた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");
        }
    }
} 

よければ参考にしてください。

株式会社ライズウィル

株式会社ライズウィル

〒110-0016
東京都台東区台東1-27-11 やわらぎビル2F
TEL : 03-4590-3200
FAX : 03-4590-3201
E-Mail : info@risewill.co.jp
URL : https://www.risewill.co.jp

海上コンテナ輸送管理システム「海コン魂!」
海コン魂!
面接予約・スタッフ管理システム「WebWORKS.」
WebWORKS.