Нет, до сих пор нет способа сделать это, не используя try ... catch
, и если бы я был вами, я бы не задерживал дыхание, ожидая его.
Что вы действительно просите - это группа функций, которые могут сказать вам, удастся ли попытка открыть файл в определенном режиме. Что-то вроде File.CanOpenForExclusiveRead()
или что-то подобное. В .NET таких методов нет, и они не существуют в Windows API. И не зря.
Предположим, что такая функция существует. То есть, вы могли бы написать:
if (File.CanOpenForExclusiveRead(filename))
{
f = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.None);
}
Звучит неплохо, правда? За исключением того, что еще нужно поместить вокруг конструктора FileStream
, потому что какой-то другой поток (возможно, в другом процессе) может открыть файл для эксклюзивного чтения между моментом проверки кода и временем, когда ваш код называется конструктором. Или что-то еще может пойти не так: файл может быть удален, диск может быть отключен и т. Д.
Уверен, что вымышленный метод File.CanOpenForExclusiveRead
был бы полезен в некоторых случаях. Эти случаи, однако, немногочисленны и далеко друг от друга, и, как я показал выше, они все равно не будут делать вам много хорошего, так как вам все равно придется обрабатывать возможные исключения.
Если вам нужен метод, который делает это, напишите свой собственный, который использует try ... catch
, и возвращает false
, если выбрано исключение. По крайней мере, вы скрываете детали реализации. Но не ждите лучшего решения. Очень маловероятно, что он готов.
@AlejoBrz, повторяя вопрос, который уже был задан, чтобы привлечь к нему новое внимание, не так работает. Это то, за что щедроты (хотя и признательно, что у вас нет репутации). –
точно, как я сказал по моему вопросу, и даже добавил ссылку на него: «Но я сказал, что это было опубликовано два года назад ... –
@ Кирк, я не пытался привлечь к нему внимание, но чтобы посмотреть, лучшее решение появилось, поскольку ловить ошибку кажется действительно грязным способом сделать это. –