Я согласен с тем, что говорили другие, относительно обработки исключений на более высоком уровне и позволяет им просто пузыриться.
Если вы действительно «должны» обрабатывать их здесь и просто возвращать true или false, обратите внимание, что все остальные решения до сих пор не могут поймать исключение, которое может возникнуть при открытии/создании файла.
Также обратите внимание, что я по-прежнему переживаю стычки только заимствования тех исключений, которые фактически документируются как те, которые могут произойти.
Чтобы сделать это, вам нужно поставить StreamWriter
конструктор в try
блоке, а также:
public static bool WriteFile(ByteBuffer data, string fileName, bool append)
{
StreamWriter writer = null;
Exception exception = null;
try
{
writer = new StreamWriter(fileName, append);
writer.Write(data);
}
catch (UnauthorizedAccessException ex)
{
exception = ex;
}
catch (SecurityException ex)
{
exception = ex;
}
catch (IOException ex)
{
exception = ex;
}
finally
{
if (writer != null)
{
try {
writer.Close();
} catch (EncoderFallbackException) { /* arguably log this as well */ }
}
if (exception != null)
{
// Log exception
return false;
}
return true;
}
}
Обратите внимание, что их пара других способов для достижения такого же поведения; включая использование блоков using
или примечание, кэширование исключения и регистрацию его в finally
, но непосредственно в соответствующих блоках catch
. YMMV.
Возможно, вы можете добавить более конкретный тип исключения для более конкретных ошибок. – Lobo
@Lobo Мне просто нужно знать, что у меня есть исключение для ложного возвращения, а не с ними. –
В этом случае, если вам просто нужно иметь логический результат, хорошо, я вижу функцию. Но всегда лучше знать, какое исключение и почему. – Lobo