Если ваша цель - написать эту утилиту (поэтому вы не заинтересованы в повторном использовании существующей утилиты, которая делает то же самое), нет хорошего способа проверить, можете ли вы удалить файл до Вы пытаетесь. Некоторые вещи, которые вы не можете протестировать, и даже когда вы можете это сделать, не гарантируют, что файл будет в том же состоянии, когда вы попытаетесь удалить его (даже через очень короткое время), поэтому ваша операция в любом случае может завершиться неудачей.
Таким образом, единственный способ go - поместить Try
/ Catch
вокруг каждой файловой операции (или принять возможность того, что сбой может привести к взлому sh).
Полученный псевдокод выглядит примерно так:
For Each (item in top-level list of places to search)
Try
'If directory, try to enter it. If successful, recurse.
'If file, try to delete it.
Catch
'Can log or just skip, this is a valid case to eat an exception
'At a minimum, you might see a System.IO.IOException or a couple of different security-related exceptions
End Try
Next