• ベストアンサー

Try~Catch、Finallyについて。

下記のように、DataSetをXML出力するメソッドを作りました。 Public Sub WriteXml(ByVal xmlDs As DataSet) Try Dim fileStream As New System.IO.FileStream(holdFilePath, System.IO.FileMode.Create) Dim setting As New System.Xml.XmlWriterSettings '文字コード設定 With setting .Encoding = System.Text.Encoding.UTF8 .Indent = True End With Dim writer As System.Xml.XmlWriter = Xml.XmlWriter.Create(fileStream, setting) 'XMLへの書き込みを行い、FileStreamを閉じる xmlDs.WriteXml(writer) writer.Close() fileStream.Close() Catch ex As Exception MsgBox(ex.message) End Try End Sub メソッドは以上です。 writer.Close()、fileStream.Close()については、確実に 処理を行いたいので、Finallyで行おうかと思ったのですが、 その場合、Dim fileStream~、Dim writer~はTryの外に出さないと、 宣言されていないと言われてしまいます。 そうなると今度は、NewやXml.XmlWriter.Create(fileStream, setting) でコケた場合にCatchが出来ません…。 Usingを使うのが近いかなと思ったんですが、複数Newしている場合 でも使えるのでしょうか? 確実にClose処理を行うための改修箇所、アドバイスいただけ ないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • NYOI
  • ベストアンサー率58% (56/96)
回答No.2

Usingの利用でいいと思います。 Tryの中に書く感じで。 Usingはカンマ区切りにすることで、複数のインスタンスに利用できます。 あるいは入れ子にしてもいいですが。 Using ○○, △△  ~ End Using または Using ○○   Using △△    ~   End Using End Using

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Dimによる宣言と Newによるインスタンス化を別々に記述すれば解決しませんか Dim fileStream As System.IO.FileStream Dim setting As System.Xml.XmlWriterSettings Dim writer As System.Xml.XmlWriter といった具合に使う変数の宣言だけをTryより前で行います インスタンス化する際に fileStream = New System.IO.FileStream(holdFilePath, System.IO.FileMode.Create) setting = New System.Xml.XmlWriterSettings writer = Xml.XmlWriter.Create(fileStream, setting) といった具合にしてやればいいと思いますよ

関連するQ&A

専門家に質問してみよう