Пытаясь ответить на этот вопрос, я с удивлением обнаружил, что попытка создать новый файл, когда этот файл уже существует, не вызывает уникальный тип исключения, он просто бросает общий IOException.
Поэтому мне остается задаться вопросом, как определить, является ли IOException результатом существующего файла или некоторой другой ошибки ввода-вывода.
Исключение имеет HResult, но это свойство защищено и, таким образом, недоступно для меня.
Единственный другой способ, который я вижу, - сопоставить шаблон с строкой сообщения, которая кажется ужасной.
Пример:
try
{
using (var stream = new FileStream("C:\\Test.txt", FileMode.CreateNew))
using (var writer = new StreamWriter(stream))
{
//write file
}
}
catch (IOException e)
{
//how do I know this is because a file exists?
}