- 題名: 構造体のファイル書き込み
- 日時: 2005/09/05 18:23:40
- ID: 12636
- この記事の返信元:
- (なし)
- この記事への返信:
- [12640] Re[1]: 構造体のファイル書き込み2005/09/07 10:11:04
- ツリーを表示
Pointは使えないみたいだったので以下の様に
してみたんですがどうでしょう?
'宣言
Private Structure PointDataOrg
<VBFixedArray(4)> Dim X As Integer
<VBFixedArray(4)> Dim y As Integer
End Structure
Private Structure GroupDataOrg 'グループ情報
<VBFixedStringAttribute(32)> Dim name As String
<VBFixedArray(8)> Dim GroupData2() As PointDataOrg
End Structure
Dim GroupData(1) As GroupDataOrg
Private Sub StartProgram()
ReDim GroupData(0).GroupData2(8)
ReDim GroupData(1).GroupData2(8)
Dim i As Integer
Dim tmp As ValueType
GroupData(0).name = "aaaaa"
GroupData(0).GroupData2(0).X = 100
GroupData(0).GroupData2(0).y = 800
FileOpen(1, "test.dat", OpenMode.Random)
For i = 0 To GroupData.Length - 1
FilePut(1, GroupData(i), i + 1)
Next
FileClose(1)
Console.WriteLine(GroupData(0).GroupData2(0).X.ToString)
'この時点の値は100
If Not Dir("test.dat") = "" Then
i = 0
FileOpen(1, "test.dat", OpenMode.Random)
Do While (Not EOF(1))
tmp = GroupData(i)
FileGet(1, tmp)
GroupData(i) = CType(tmp, GroupDataOrg)
i += 1
Loop
FileClose(1)
End If
Console.WriteLine(GroupData(0).GroupData2(0).X.ToString)
'この時点でも値は100
End Sub
分類:[.NET]
構造体のデータをファイルに書き込んでいます。
構造体のメンバのタイプにpointを使用しているのですが
ファイルに書き込むと値が0になっています。
(バイナリエディタで確認しました)
何がいけないのでしょうか?
ご存知の方よろしくお願い致します。
'宣言
Private Structure GroupDataOrg 'グループ情報
<VBFixedStringAttribute(32)> Dim name As String
<VBFixedArray(8)> Dim XY() As Point
End Structure
Dim GroupData(1) As GroupDataOrg
Private Sub StartProgram()
ReDim GroupData(0).XY(8)
ReDim GroupData(1).XY(8)
GroupData(0).XY(0).X = 100
GroupData(0).XY(0).Y = 800
Dim i As Short
FileOpen(1, "test.dat", OpenMode.Random, , , Len(GroupData(0)))
For i = 0 To GroupData.Length - 1
FilePut(1, GroupData(i), i + 1)
Next
FileClose(1)
Console.WriteLine(GroupData(0).XY(0).X.ToString)
'この時点の値は100
If Dir("test.dat") <> "" Then
i = 0
FileOpen(1, "test.dat", OpenMode.Random, , , Len(GroupData(0)))
Do While (Not EOF(1))
FileGet(1, GroupData(i), i + 1)
i += 1
Loop
FileClose(1)
End If
Console.WriteLine(GroupData(0).XY(0).X.ToString)
'この時点の値は0になっている
End Sub