Позвольте мне начать с двойной проверки, что я понимаю вопрос.Если вы запустите что-то вроде приведенного ниже фрагмента, вы ожидаете, что он в конечном итоге потерпит неудачу, верно?
while (true)
{
System.IO.Directory.CreateDirectory( ".\\FooDir" );
System.IO.Directory.Delete( ".\\FooDir" );
}
Если ваше приложение - единственная вещь, работающая в системе, у которой есть дескриптор, открытый для этого файла, тогда1004 * чувствует как ошибка.Так что знание версии ОС поможет.
С другой стороны, если в системе есть что-то еще, что удерживает ручку открытой какое-то время, то становится ли это ошибкой или нет, становится немного более размытым.Количество вещей, которые пытаются слепо использовать файлы и каталоги, может вас удивить.Например, наивный индексатор может зайти в этот каталог, перечислить его, найти файлы для индексации и т. Д. - и, если вы столкнетесь с ним, blammo.Подобный наивный антивирусный фильтр или какой-то другой фильтр файловой системы, возможно, тоже его высовывает (в этом случае это все еще похоже на ошибку).
Есть некоторые вещи, которые мы сделали вОС, чтобы попытаться предоставить такие услуги, как эти способы убраться с вашего пути.Воспроизводится ли это, если вы выключаете индексатор, выключаете ли вы какой-либо антивирус, любую антивирусную программу?Мы можем пойти оттуда, и, надеюсь, мы обнаружим, что более новые биты уже исправили это (я знаю, что в этом утверждении было много предположений).
Еще один относительно интересный момент состоит в том, что ERROR_ACCESS_DENIEDошибка Win32, сопоставленная с несколькими базовыми состояниями в системе (см., например, в этой статье ).Так что, если мы сможем копнуть немного глубже, мы сможем выяснить, что файловая система пытается сообщить приложению (если это больше, чем отказано в доступе).
Мы можем в конечном итоге начать разговор оможете ли вы, в дикой природе, предположить, что ваше приложение - это единственное, что копается в ваших файлах и каталогах.Вы, вероятно, можете догадаться, куда пойдет тот.