Рассмотрим эту простую программу:
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
открыто в проводнике.
Я хотел бы знать, почему это происходит и как защититься от такой ситуации.
Я использую окна 7 и .net 4.