読者です 読者をやめる 読者になる 読者になる

finally

C#

finallyは、tryブロックの中で例外が発生しても発生しなくても実行すべき処理を書く場所・・・。
今回は、2つのファイルを連続して読み込んで内容を出力・・・。
2つ目で例外が発生しても、1つ目のファイルを閉じる処理は実行するような形にする・・・。
MainClass.csで、

tryブロックで、StreamReaderで"test1.txt"を開いて、ストリームはsr1に格納・・・。
sr1.ReadToEndでテキストの内容が読み込まれてtext1に格納・・・。
Console.WriteLineでtext1の内容を出力・・・。
これを"test2.txt"でも同様に・・・。

catchは、ex.Messageを出力しているだけ・・・。

finallyは、"finally"といったん出力・・・。
そのあと、それぞれのストリームがnullでなければ、Closeで閉じて、"~ closed!"という感じで閉じたことを出力・・・。

f:id:BG1:20170226211920p:plain

test1.txtだけ存在する場合は、

text1 = ABCDE
Error: ファイル 'C:\Project\Cloud\github.com\Sample\cs\finally\finally\src\final
ly_\finally_\bin\Release\test2.txt' が見つかりませんでした。
finally
sr1 closed!
続行するには何かキーを押してください . . .

こうなる・・・。
finallyでsr2は失敗してnullなので閉じなくていいが、sr1は成功しているのでCloseで閉じている・・・。

f:id:BG1:20170226212339p:plain

test2.txtも存在する場合は、

text1 = ABCDE
text2 = XYZ
finally
sr2 closed!
sr1 closed!
続行するには何かキーを押してください . . .

こうなる・・・。
finallyでどちらもCloseで閉じている・・・。

こんな感じで成功しても失敗しても終了処理をする必要がある場合は、finallyに書く・・・。

Sample/cs/finally/finally/src/finally_ at master · bg1bgst333/Sample · GitHub