自己紹介
やあ、謎多き神「FileSystemWatcher」だ。今日は私が「C#.NET」のFileSystemWatcherクラスについて語る。影から監視する私の能力と似ているこのクラスの機能を、一緒に探求しよう。
基本機能
FileSystemWatcherクラスは、指定したフォルダやファイルの変化を監視し、変更を検知するためのクラスだ。このクラスを使えば、ファイルの作成、変更、削除などのイベントをリアルタイムで処理することが可能だ。
C#
// FileSystemWatcherの基本機能
using System;
using System.IO;
class Program
{
    static void Main()
    {
        FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Temp");
        // イベントの設定
        watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
        // イベントハンドラーの設定
        watcher.Changed += OnChanged;
        watcher.Created += OnChanged;
        // 監視を開始
        watcher.EnableRaisingEvents = true;
        Console.WriteLine("ファイル監視を開始しました。Enterを押すと終了します。");
        Console.ReadLine();
    }
    private static void OnChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"ファイルが変更されました: {e.FullPath} - {e.ChangeType}");
    }
}
ネットワーク上での注意点
ネットワーク共有ディレクトリを監視する際、FileSystemWatcherのパフォーマンスが低下する場合がある。特に、通知が遅延したり、バッファーがオーバーフローする可能性がある点に注意しよう。
C#
// ネットワークディレクトリの監視
using System;
using System.IO;
class Program
{
    static void Main()
    {
        string networkPath = @"\\NetworkShare\Temp";
        if (!Directory.Exists(networkPath))
        {
            Console.WriteLine("ネットワークパスが無効です。");
            return;
        }
        FileSystemWatcher watcher = new FileSystemWatcher(networkPath);
        watcher.EnableRaisingEvents = true;
        Console.WriteLine("ネットワークディレクトリを監視中...");
        Console.ReadLine();
    }
}
BufferSizeを最適化する方法
FileSystemWatcherの内部バッファーサイズはデフォルトで8192バイトだが、大量のイベントが発生するとオーバーフローする場合がある。この問題を回避するため、バッファーサイズを調整することができる。ただし、最大で64KBまでしか設定できない。
各イベントは最大16バイトのメモリーを使用するため、イベントが多すぎると最悪検知出来ないということもある。
C#
// BufferSizeの設定
FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Temp");
watcher.InternalBufferSize = 64 * 1024; // 64KBに設定
その他のプロパティの説明
FileSystemWatcherには以下の便利なプロパティがある。
- IncludeSubdirectories: サブディレクトリも監視するかどうかを指定する。
 - Filter: 監視対象のファイルタイプを指定する。
 
これらを使うことで、より詳細な監視が可能になる。
C#
// IncludeSubdirectoriesとFilterの使用例
FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Temp");
watcher.IncludeSubdirectories = true; // サブディレクトリを監視
watcher.Filter = "*.txt"; // テキストファイルのみ監視
解説
FileSystemWatcherは、ファイルやフォルダの変化を即座に検知する強力なツールだ。しかし、ネットワーク環境やバッファサイズの設定など、注意すべき点も多い。このクラスを使いこなすことで、システムの自動化や効率化を図ることができるだろう。では、次の冒険でまた会おう!

0 件のコメント:
コメントを投稿