アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB.NET 2003を使用して、Windowsソフトを開発しています。

データの保存にXMLを使用したいのですが、読み出せるのですが書き込めません。

どのような方法でもいいので、既存XMLファイルにデータを追加する方法をご教授願えませんか?




また、ご存知であればでよいのですが、VB.NETでWindowsソフト開発で、XMLに関する解説が詳しく掲載されているサイトはありませんか?

A 回答 (5件)

こんな感じです。



Module Module1
  Sub Main()
    Dim l_strPath As String = "C:\Text.xml"
    Dim l_dstデータセット As DataSet
    Dim l_encエンコーディング As System.Text.Encoding = System.Text.Encoding.GetEncoding(932)

    'データセットを書く
    'http://okwave.jp/kotaeru.php3?q=1583980
    l_dstデータセット = 作成_データセット()

    'データセットを出力
    Call XML_書(l_dstデータセット, l_strPath)

    'データセットを初期化
    l_dstデータセット = New DataSet()

    'データセットを読込
    Call XML_読(l_dstデータセット, l_strPath)
  End Sub

  Sub XML_書(ByVal p_dstデータ As DataSet, ByVal p_strファイル As String)
    Dim l_str出力フォルダ As String = IO.Path.GetDirectoryName(p_strファイル)

    '出力実行
    Dim l_swXML As New IO.StreamWriter(p_strファイル)
    p_dstデータ.WriteXml(l_swXML, XmlWriteMode.WriteSchema)
    l_swXML.Close()
    l_swXML = Nothing
  End Sub

  Sub XML_読(ByRef p_dstデータ As DataSet, ByVal p_strファイル As String)
    '読込実行
    Dim l_swXML As New IO.StreamReader(p_strファイル)
    Dim l_xrdXML As New Xml.XmlTextReader(l_swXML)

    p_dstデータ.ReadXml(l_xrdXML)
    l_xrdXML.Close()
    l_swXML.Close()
    l_swXML = Nothing
  End Sub

  Function 作成_データセット() As DataSet
    Dim l_dtbデータテーブル As New DataTable("新テーブル")
    Dim l_drwデータロウ As DataRow
    Dim i As Integer
    Dim l_dstデータセット As New DataSet()

    l_dtbデータテーブル.Columns.Add("文字型", System.Type.GetType("System.String"))
    l_dtbデータテーブル.Columns.Add("整数型", System.Type.GetType("System.Int32"))
    l_dtbデータテーブル.Columns.Add("長整数型", System.Type.GetType("System.Int64"))

    For i = 1 To 26
      l_drwデータロウ = l_dtbデータテーブル.NewRow
      l_drwデータロウ.Item("文字型") = Chr(48 + i) & Chr(64 + i)
      l_drwデータロウ.Item("整数型") = i * 1000
      l_drwデータロウ.Item("長整数型") = i * 1000000
      l_dtbデータテーブル.Rows.Add(l_drwデータロウ)
    Next

    l_dstデータセット.Tables.Add(l_dtbデータテーブル)
    Return l_dstデータセット
  End Function
End Module
    • good
    • 0

例えば、ファイルが使用中で同じ名前で書き込みできないということなら、最初にファイルをコピーして、そちらを使用するようにしたらどうでしょう。

    • good
    • 0

>クローズする方法


StreamReaderだったら
Close
ですが、ぼけた回答だったらすみません。
    • good
    • 0

>このファイルは別のプロセスが使用中です。


ファイルが、開かれたままになっているということですね。

この回答への補足

ファイルが開きっぱなしってことはわかるのですが、クローズする方法がわからないんです。

あと、XMLでのデータの取り扱いがこれで本当によいのかどうかもわからない状態です。

補足日時:2005/11/02 21:56
    • good
    • 0

Imports System.Xml


して
XmlDocumentで
Loadして
適当にいじって
Saveで書き出せます

そういうことではなくて、書き込めないという別の理由なら、
こういうXMLデータファイルをこういうやり方で読み込んだ
そして、こういう処理をして、
こういうやり方でファイルに書き込もうとしたが
こういう風に失敗するというように
もう少し詳しく書いて下さい

この回答への補足

説明不足で申し訳ありませんでした。

XMLデータをStreamReaderで読み出し、DataSetとして使用します。
DataSet(正確にはDataTable)に対してデータ追加を行い、データの加工が終わったDataSetをStreamWriterを利用して書き込む際に以下のエラーが出ます。

'System.IO.IOException' のハンドルされていない例外が mscorlib.dll で発生しました。

追加情報 : プロセスはファイル "XXXX.xml" にアクセスできません。このファイルは別のプロセスが使用中です。

補足日時:2005/11/02 18:39
    • good
    • 0

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