Csharp/CSharp Tutorial/Language Basics/Finally
Dispose a StreamWriter in finally block
using System;
using System.IO;
public sealed class MainClass
{
static void Main(){
StreamWriter sw = new StreamWriter("Output.txt");
try {
sw.WriteLine( "This is a test of the emergency dispose mechanism" );
}
finally {
if( sw != null ) {
((IDisposable)sw).Dispose();
}
}
}
}
finally block is always executed even if an exception was thrown in the try
using System;
using System.IO;
class Processor
{
public void ProcessFile()
{
FileStream f = new FileStream("wrongNameFile.txt", FileMode.Open);
try
{
StreamReader t = new StreamReader(f);
string line;
while ((line = t.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
finally
{
f.Close();
}
}
}
class Test
{
public static void Main()
{
Processor processor = new Processor();
try
{
processor.ProcessFile();
}
catch (Exception e)
{
Console.WriteLine("Exception: {0}", e);
}
}
}
Exception: System.IO.FileNotFoundException: Could not find file "C:\Java_Dev\WEB\dev\CSharp\wrongNam eFile.txt". File name: "C:\Java_Dev\WEB\dev\CSharp\wrongNameFile.txt" at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, St ring msgPath, Boolean bFromProxy) at System.IO.FileStream..ctor(String path, FileMode mode) at Processor.ProcessFile() at Test.Main()
Using finally
Sometimes you can define a block of code that will execute when a try/catch block is left.
The general form of a try/catch that includes finally is shown here:
try {
// block of code to monitor for errors
}
catch (ExcepType1 exOb) {
// handler for ExcepType1
}
catch (ExcepType2 exOb) {
// handler for ExcepType2
}
.
.
.
finally {
// finally code
}