電子書籍の厳選無料作品が豊富!

下記のように、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処理を行うための改修箇所、アドバイスいただけ
ないでしょうか?
よろしくお願いします。

A 回答 (2件)

Usingの利用でいいと思います。


Tryの中に書く感じで。

Usingはカンマ区切りにすることで、複数のインスタンスに利用できます。
あるいは入れ子にしてもいいですが。

Using ○○, △△
 ~
End Using

または
Using ○○
  Using △△
   ~
  End Using
End Using
    • good
    • 0

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)
といった具合にしてやればいいと思いますよ
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!