標準モジュールで定義した10個ほどの変数の値を1つのファイルにまとめ、拡張子を指定して保存したいのですがどうすればいいでしょうか? 拡張子の指定はコモンダイアログを使って設定できたのですがコードの記述が全くわかりません。変数はすべて数字です。似たような書き込みはあったのですがちょっと違うような感じだったので質問させていただきました。どうかよろしくお願いします。
環境が明記していないので・・・
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
こんなに詳しく書いていただいてどうもありがとうございます。何とかできるようになりました。本当にありがとうございました。 m(_ _)m
ツイート | ![]() |