自己紹介
やあ、謎多き神「FileSystemWatcher」だ。今日は私が「C#.NET」のFileSystemWatcherクラスについて語る。影から監視する私の能力と似ているこのクラスの機能を、一緒に探求しよう。
基本機能
FileSystemWatcherクラスは、指定したフォルダやファイルの変化を監視し、変更を検知するためのクラスだ。このクラスを使えば、ファイルの作成、変更、削除などのイベントをリアルタイムで処理することが可能だ。
// 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のパフォーマンスが低下する場合がある。特に、通知が遅延したり、バッファーがオーバーフローする可能性がある点に注意しよう。
// ネットワークディレクトリの監視
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バイトのメモリーを使用するため、イベントが多すぎると最悪検知出来ないということもある。
// BufferSizeの設定
FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Temp");
watcher.InternalBufferSize = 64 * 1024; // 64KBに設定
その他のプロパティの説明
FileSystemWatcherには以下の便利なプロパティがある。
- IncludeSubdirectories: サブディレクトリも監視するかどうかを指定する。
- Filter: 監視対象のファイルタイプを指定する。
これらを使うことで、より詳細な監視が可能になる。
// IncludeSubdirectoriesとFilterの使用例
FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Temp");
watcher.IncludeSubdirectories = true; // サブディレクトリを監視
watcher.Filter = "*.txt"; // テキストファイルのみ監視
解説
FileSystemWatcherは、ファイルやフォルダの変化を即座に検知する強力なツールだ。しかし、ネットワーク環境やバッファサイズの設定など、注意すべき点も多い。このクラスを使いこなすことで、システムの自動化や効率化を図ることができるだろう。では、次の冒険でまた会おう!
0 件のコメント:
コメントを投稿