このコードを考えてみましょう:
string dir = Environment.CurrentDirectory + @"\a";
Directory.CreateDirectory(dir);
FileSystemWatcher watcher = new FileSystemWatcher(dir);
watcher.IncludeSubdirectories = false;
watcher.EnableRaisingEvents = true;
Console.WriteLine("Deleting " + dir);
Directory.Delete(dir, true);
if (Directory.Exists(dir))
{
Console.WriteLine("Getting dirs of " + dir);
Directory.GetDirectories(dir);
}
Console.ReadLine();
興味深いことに、これはUnauthorizedAccessExceptionをにスローしDirectory.GetDirectories(dir)
ます。
監視対象のディレクトリを削除するとエラーは発生しませんが、Directory.Exists()はtrueを返し、ディレクトリは引き続き一覧表示されます。さらに、ディレクトリにアクセスすると、どのプログラムでも「アクセスが拒否されました」という結果になります。FileSystemWatcherを使用する.NETアプリケーションが終了すると、ディレクトリは消えます。
ディレクトリを適切に削除しながら、ディレクトリを監視するにはどうすればよいですか?