Каталог c: \ test содержит около 50 файлов, без подкаталогов.
If IO.Directory.Exists("C:\test") Then
IO.Directory.Delete("C:\test", True)
End If
IO.Directory.CreateDirectory("C:\test")
Диск C - твердотельный накопитель Intel X25-M80, ОС - Windows 7 64-битная с поддержкой 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?