次の簡単なプログラムを考えてみましょう:
private static void Main(string[] args)
{
var directoryName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Directory");
if (Directory.Exists(directoryName))
Directory.Delete(directoryName, true);
Directory.CreateDirectory(directoryName);
var stream = File.Create(Path.Combine(directoryName, "File")); //throws
stream.Close();
}
これは、このプログラムを実行するだけで問題なく動作します。Directory
Windowsエクスプローラーでそれを参照してから実行すると、奇妙なことが起こります。この場合、 UnautorizedAccessException を取得します"Access to the path 'C:\Users\rfurman\AppData\Roaming\Directory\File' is denied."
これがおかしい場合は、同じ条件でこれを実行します。
private static void Main(string[] args)
{
var directoryName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Directory");
if (Directory.Exists(directoryName))
Directory.Delete(directoryName, true);
var value = Directory.Exists(directoryName);
Console.WriteLine(value);
Console.ReadKey();
}
このプログラムは、エクスプローラーで開いているTrue
場合に印刷されます。Directory
私が知りたいのは、なぜこれが起こるのか、そしてそのような状況から身を守る方法です.
Windows 7 と .net 4 を使用しています。