finally は、例外の有無にかかわらず常に実行されます。これは、何かがクリーンアップされたことを絶対に確信したい場合に便利です。 例:
void ReadFile(int index)
{
// To run this code, substitute a valid path from your local machine
string path = @"c:\users\public\test.txt";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (System.IO.IOException e)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
finally
{
if (file != null)
{
file.Close();
}
}
// Do something with buffer...
}
finally がないと、エラーが発生した場合にファイルが適切に閉じられない可能性があります。エラーが発生するかどうかに関係なく、完了したらファイルを閉じる必要があります。
別の方法を検討してください。
void ReadFile(int index)
{
// To run this code, substitute a valid path from your local machine
string path = @"c:\users\public\test.txt";
System.IO.StreamReader file = new System.IO.StreamReader(path);
char[] buffer = new char[10];
try
{
file.ReadBlock(buffer, index, buffer.Length);
file.Close();
}
catch (System.IO.IOException e)
{
Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message);
}
}
エラーが発生した場合ReadBlock
、ファイルは適切に閉じられません。