У меня возникла странная ситуация, когда быстрое удаление и создание каталогов в Windows Server 2008 приводит к некоторым странным ошибкам. Иногда я получаю IOException, однажды у меня было NotAuthorizedException.
Вот мой код, который работает, но при переходе через отладчик выдается множество исключений. На самом деле, я только что получил IOException с «каталог не пустой» при выполнении directory.delete!
Обновление
Многие из ответов посвящены неатомарному созданию каталогов, задержкам записи и т. Д. Существует ли 100% гарантированный способ сделать эту работу? В идеале я хотел бы, чтобы какой-нибудь системный вызов был «DeleteDirectoryAndWaitForTheDirectoryToBeDeleted» и соответствующий системный вызов «CreateDirectoryAndWaitForTheDirectoryToBeCreated».
Еще одно обновление
Я взял приведенный ниже код Нейла и попробовал его на своей машине, и он довольно быстро вышел из строя (после 20 циклов). Кажется, что происходит, что служба IDriveE имеет доступ к каталогу, и попытка создать каталог завершается неудачно с DELETE PENDING. Полагаю, мне нужно еще раз исследовать такие вещи, как DELETE PENDING.
Лично мне не нравится этот код, так как он "пахнет" неправильно - но он работает.
Console.WriteLine("CleanAndCreateDirectory: {0}", baseDirectory);
while (Directory.Exists(baseDirectory))
{
Console.WriteLine("DeleteDirectory: {0}", baseDirectory);
try
{
Directory.Delete(baseDirectory, true);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.Message);
Thread.Sleep(1000);
}
}
while (!Directory.Exists(baseDirectory))
{
try
{
Directory.CreateDirectory(baseDirectory);
}
catch (Exception ex)
{
Console.Error.WriteLine(ex.Message);
}
}
Мои подозрения - что-то, наблюдающее за файловой системой, которое вызывает задержки в некоторых операциях, но я понятия не имею, что.