DOBON.NET DOBON.NETプログラミング掲示板過去ログ

構造体のファイル書き込み

環境/言語:[XP(SP2) Framework1.1]
分類:[.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
2005/09/07(Wed) 10:11:49 編集(投稿者)

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
みそ様
 返答ありがとうございます。
pointの使用はやはりだめですよね。

ソースありがとうございます。
これならすっきりしていいですね。
使わせていただきます。ありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板