Каталог c:\test имеет 50 или около того файлов в нем, никаких подкаталогов.
If IO.Directory.Exists("C:\test") Then
IO.Directory.Delete("C:\test", True)
End If
IO.Directory.CreateDirectory("C:\test")
Привод C - это SSD-накопитель Intel X25-M80, операционная система - 64-разрядная версия Windows 7 с поддержкой TRIM, Visual Studio - 2008 с целевой средой 3.5. Когда выполняется над кодом, CreateDirectory нарушает выполнение кода без (видимого) исключения. После большой головной боли я обнаружил, что удаление еще не выполнено, когда выполнение временного кода попадает в CreateDirectory. Если я изменю свой код следующим образом:
If IO.Directory.Exists("C:\test") Then
IO.Directory.Delete("C:\test", True)
End If
Threading.Thread.Sleep(2000)
IO.Directory.CreateDirectory("C:\test")
тогда все работает так, как ожидалось.
Мои вопросы, помимо очевидной WTF, следующие:
- не должен IO.Directory.Delete быть вызовом функции блокировки независимо от того, какой диск
- SSD "обманывает" при удалении из-за включенной поддержки TRIM?