Разница в том, что если вы не используете finally
, и возникает исключение, отличное от IOException
, ваше приложение будет пропускать дескриптор файла, потому что строка .Close
никогда не будет достигнута.
Лично я всегда использую , используя блоки при работе с доступными ресурсами, такими как потоки:
try
{
using (var reader = File.OpenText(@"c:\users\public\test.txt"))
{
char[] buffer = new char[10];
reader.ReadBlock(buffer, index, buffer.Length);
// Do something with buffer...
}
}
catch (IOException ex)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
Таким образом, мне не нужно беспокоиться о том, как правильно их утилизировать. Работа try / finally выполняется компилятором, и я могу сосредоточиться на логике.