変数を指定した拡張子で保存するには

解決


  2003-08-31 14:22:43  No: 79210

標準モジュールで定義した10個ほどの変数の値を1つのファイルにまとめ、拡張子を指定して保存したいのですがどうすればいいでしょうか?  拡張子の指定はコモンダイアログを使って設定できたのですがコードの記述が全くわかりません。変数はすべて数字です。似たような書き込みはあったのですがちょっと違うような感じだったので質問させていただきました。どうかよろしくお願いします。


岡田 之仁  2003-09-01 01:42:29  No: 79211

環境が明記していないので・・・

VB6でですか?

VB.NETなら、こんな風にしたら出来ますが・・・
あくまでサンプルなので、ご利用の際には、必要な形に変更して
お使い下さい。

尚、下記のものは、Win2000の場合、\WinNT\System32の中にファイルを
保存します。

ファイル名や拡張子も、ご自身で必要なものに変更して下さい。

以上。

Imports System.IO
Imports System.Environment

Public Structure TestIntegerData
    Public Data1 As Integer
    Public Data2 As Integer
    Public Data3 As Integer
    Public Data4 As Integer
    Public Data5 As Integer
    Public Data6 As Integer
    Public Data7 As Integer
    Public Data8 As Integer
    Public Data9 As Integer
    Public Data10 As Integer
End Structure

Public Structure TestIntegerArryData
    Public Data() As Integer
    Public Sub Initialize()
        ReDim Data(10)
    End Sub
End Structure

Public Structure TestStringData
    Public Data1 As String
    Public Data2 As String
    Public Data3 As String
    Public Data4 As String
    Public Data5 As String
    Public Data6 As String
    Public Data7 As String
    Public Data8 As String
    Public Data9 As String
    Public Data10 As String
End Structure

Public Structure TestStringArrayData
    Public Data() As String
    Public Sub Initialize()
        ReDim Data(10)
    End Sub
End Structure

Public Structure TestConfigData
    Public TestInteger As TestIntegerData
    Public TestString As TestStringData
    Public TestIntegerArray As TestIntegerArryData
    Public TestStringArray As TestStringArrayData
    Public Sub Initialize()
        Call TestIntegerArray.Initialize()
        Call TestStringArray.Initialize()
    End Sub
End Structure

Module Module1

    Public Sub Main()

        Dim TestData As TestConfigData

        Call TestData.Initialize()

        Call LoadConfigData(TestData)

        TestData.TestInteger.Data1 = 10
        TestData.TestInteger.Data2 = 11
        TestData.TestInteger.Data3 = 12
        TestData.TestInteger.Data4 = 13
        TestData.TestInteger.Data5 = 14
        TestData.TestInteger.Data6 = 15
        TestData.TestInteger.Data7 = 16
        TestData.TestInteger.Data8 = 17
        TestData.TestInteger.Data9 = 18
        TestData.TestInteger.Data10 = 19
        TestData.TestIntegerArray.Data(0) = 10
        TestData.TestIntegerArray.Data(1) = 11
        TestData.TestIntegerArray.Data(2) = 12
        TestData.TestIntegerArray.Data(3) = 13
        TestData.TestIntegerArray.Data(4) = 14
        TestData.TestIntegerArray.Data(5) = 15
        TestData.TestIntegerArray.Data(6) = 16
        TestData.TestIntegerArray.Data(7) = 17
        TestData.TestIntegerArray.Data(8) = 18
        TestData.TestIntegerArray.Data(9) = 19
        TestData.TestString.Data1 = "10"
        TestData.TestString.Data2 = "11"
        TestData.TestString.Data3 = "12"
        TestData.TestString.Data4 = "13"
        TestData.TestString.Data5 = "14"
        TestData.TestString.Data6 = "15"
        TestData.TestString.Data7 = "16"
        TestData.TestString.Data8 = "17"
        TestData.TestString.Data9 = "18"
        TestData.TestString.Data10 = "19"
        TestData.TestStringArray.Data(0) = "10"
        TestData.TestStringArray.Data(1) = "11"
        TestData.TestStringArray.Data(2) = "12"
        TestData.TestStringArray.Data(3) = "13"
        TestData.TestStringArray.Data(4) = "14"
        TestData.TestStringArray.Data(5) = "15"
        TestData.TestStringArray.Data(6) = "16"
        TestData.TestStringArray.Data(7) = "17"
        TestData.TestStringArray.Data(8) = "18"
        TestData.TestStringArray.Data(9) = "19"

        Call SaveConfigData(TestData)

        End

    End Sub

    Public Sub LoadConfigData(ByRef dtTest As TestConfigData)

        Dim bRet As Boolean
        'シリアル化する追加のオブジェクト型のType配列を作成
        Dim et() As Type = New Type() {GetType(TestConfigData)}

        '保存した内容を復元
        Dim serializer1 As New System.Xml.Serialization.XmlSerializer(GetType(TestConfigData), et)
        Dim fs As IO.FileStream

        Try
            ' EXEと同じパスの場合
            fs = New IO.FileStream(Environment.GetFolderPath(SpecialFolder.System) & "\TestData.xml", IO.FileMode.Open)
            'fs = New IO.FileStream(Application.StartupPath & "\TestData.xml", IO.FileMode.Open)
        Catch ex As Exception
            ' 初めてロードする場合、保存ファイルが無いので、ここで初期化して保存させる
            Call dtTest.Initialize()
            dtTest.TestInteger.Data1 = 0
            dtTest.TestInteger.Data2 = 1
            dtTest.TestInteger.Data3 = 2
            dtTest.TestInteger.Data4 = 3
            dtTest.TestInteger.Data5 = 4
            dtTest.TestInteger.Data6 = 5
            dtTest.TestInteger.Data7 = 6
            dtTest.TestInteger.Data8 = 7
            dtTest.TestInteger.Data9 = 8
            dtTest.TestInteger.Data10 = 9
            dtTest.TestIntegerArray.Data(0) = 0
            dtTest.TestIntegerArray.Data(1) = 1
            dtTest.TestIntegerArray.Data(2) = 2
            dtTest.TestIntegerArray.Data(3) = 3
            dtTest.TestIntegerArray.Data(4) = 4
            dtTest.TestIntegerArray.Data(5) = 5
            dtTest.TestIntegerArray.Data(6) = 6
            dtTest.TestIntegerArray.Data(7) = 7
            dtTest.TestIntegerArray.Data(8) = 8
            dtTest.TestIntegerArray.Data(9) = 9
            dtTest.TestString.Data1 = "0"
            dtTest.TestString.Data2 = "1"
            dtTest.TestString.Data3 = "2"
            dtTest.TestString.Data4 = "3"
            dtTest.TestString.Data5 = "4"
            dtTest.TestString.Data6 = "5"
            dtTest.TestString.Data7 = "6"
            dtTest.TestString.Data8 = "7"
            dtTest.TestString.Data9 = "8"
            dtTest.TestString.Data10 = "9"
            dtTest.TestStringArray.Data(0) = "0"
            dtTest.TestStringArray.Data(1) = "1"
            dtTest.TestStringArray.Data(2) = "2"
            dtTest.TestStringArray.Data(3) = "3"
            dtTest.TestStringArray.Data(4) = "4"
            dtTest.TestStringArray.Data(5) = "5"
            dtTest.TestStringArray.Data(6) = "6"
            dtTest.TestStringArray.Data(7) = "7"
            dtTest.TestStringArray.Data(8) = "8"
            dtTest.TestStringArray.Data(9) = "9"
            Call SaveConfigData(dtTest)
            fs = New IO.FileStream(Environment.GetFolderPath(SpecialFolder.System) & "\TestData.xml", IO.FileMode.Open)
            ' EXEと同じパスの場合
            'fs = New IO.FileStream(Application.StartupPath & "\TestData.xml", IO.FileMode.Open)
        Finally
            dtTest = serializer1.Deserialize(fs)
        End Try

        fs.Close()

    End Sub

    Public Sub SaveConfigData(ByRef dtConfig As TestConfigData)

        'シリアル化する追加のオブジェクト型のType配列を作成
        Dim et() As Type = New Type() {GetType(TestConfigData)}

        'XMLファイルに保存
        Dim serializer1 As New System.Xml.Serialization.XmlSerializer(GetType(TestConfigData), et)
        Dim fs As IO.FileStream

        Try
            fs = New IO.FileStream(Environment.GetFolderPath(SpecialFolder.System) & "\TestData.xml", IO.FileMode.Create)
            ' EXEと同じパスの場合
            'fs = New IO.FileStream(Application.StartupPath & "\TestData.xml", IO.FileMode.Create)
        Catch ex As Exception
            Dim fi As FileInfo
            fi = New FileInfo(Environment.GetFolderPath(SpecialFolder.System) & "\TestData.xml")
            ' EXEと同じパスの場合
            'fi = New FileInfo(Application.StartupPath & "\TestData.xml")
            fi.Delete()
            fs = New IO.FileStream(Environment.GetFolderPath(SpecialFolder.System) & "\TestData.xml", IO.FileMode.Create)
            ' EXEと同じパスの場合
            'fs = New IO.FileStream(Application.StartupPath & "\TestData.xml", IO.FileMode.Create)
        Finally
            serializer1.Serialize(fs, dtConfig)
        End Try

        fs.Close()

    End Sub

End Module


  2003-09-01 08:38:20  No: 79212

こんなに詳しく書いていただいてどうもありがとうございます。何とかできるようになりました。本当にありがとうございました。  m(_ _)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加