В моем конкретном случае я неоднократно создавал и удалял 10000 папок.Мне кажется, что проблема заключалась в том, что, хотя метод Directory.Delete(path, true)
возвращает, механизм ОС, который находится ниже, может все еще удалять файлы с диска.И когда я начинаю создавать новые папки сразу после удаления старых, некоторые из них все еще заблокированы, потому что они еще не полностью удалены.И я получаю System.UnauthorizedAccessException: «Доступ к пути запрещен».
Использование Thread.Sleep(5000)
после Directory.Delete(path, true)
решает эту проблему.Я абсолютно согласен с тем, что это небезопасно, и я никого не поощряю к его использованию.Я хотел бы, чтобы здесь был лучший подход к решению этой проблемы, чтобы улучшить мой ответ.Сейчас я просто даю идею, почему может произойти это исключение.
class Program
{
private static int numFolders = 10000;
private static string rootDirectory = "C:\\1";
static void Main(string[] args)
{
if (Directory.Exists(rootDirectory))
{
Directory.Delete(rootDirectory, true);
Thread.Sleep(5000);
}
Stopwatch sw = Stopwatch.StartNew();
CreateFolder();
long time = sw.ElapsedMilliseconds;
Console.WriteLine(time);
Console.ReadLine();
}
private static void CreateFolder()
{
var one = Directory.CreateDirectory(rootDirectory);
for (int i = 1; i <= numFolders; i++)
{
one.CreateSubdirectory(i.ToString());
}
}
}