Имея сегодня ментальный блок, нужна рука, проверяющая мою логику, не fubar'ed.
Традиционно я бы сделал ввод / вывод файла подобным этому:
FileStream fs = null; // So it's visible in the finally block
try
{
fs = File.Open("Foo.txt", FileMode.Open);
/// Do Stuff
}
catch(IOException)
{
/// Handle Stuff
}
finally
{
if (fs != null)
fs.Close();
}
Однако это не очень элегантно.
В идеале я бы хотел использовать блок using
, чтобы избавиться от потока файлов, когда я закончу, однако я не уверен насчет синергии между использованием и try / catch.
Вот как я хотел бы реализовать вышеупомянутое:
try
{
using(FileStream fs = File.Open("Foo.txt", FileMode.Open))
{
/// Do Stuff
}
}
catch(Exception)
{
/// Handle Stuff
}
Однако меня беспокоит то, что преждевременный выход (через выброшенное исключение) из блока using может не позволить блоку using завершить выполнение и очистить его объект. Я просто параноик, или это действительно сработает так, как я намереваюсь?