Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > как узнать длину структуры


Автор: NatzZ 8.10.2007, 09:44
Не получается узнать длинну структуры(имеющей в своем составие вложенные)  чтобы занести ее в файл. Len дает длинну тока начальной структуры (не учитывает вложения) Способ с узнаваением длинны каждой структуры и их сложение&умножение доет какойто Непонятный результат(приодится прибавлять  729 + 6 * MaxNPVDatRecs . 

Или скажите откуда берется число 729 + 6 * MaxNPVDatRecs (без которого FilePut пишет что непомещается запись не помещается в файл)

ЗЫ Просто данные нужно заносить строго пошаблону структуры и непонятно получаемый файл соотвестует ему или нет
Код


Imports System.Data.SqlClient

Public Class write_dat
    Public MaxNPVDatRecs As Integer =15 '

 
    Structure TDataRec
        Dim id As Short
        Dim value As Single
    End Structure


    Structure TDataRecs
        Dim byDay As Byte
        Dim byMonth As Byte
        Dim Values() As TDataRec
        Public Sub Initialize(ByVal MaxDatRecs)
            ReDim Values(MaxDatRecs - 1)
        End Sub
    End Structure

    Structure TFile
        Dim wParamCount As Integer
        <VBFixedArray(719)> Dim TwoMinValues() As TDataRecs
        Public Sub Initialize()
            ReDim TwoMinValues(719)
        End Sub

    End Structure

    Sub write_data(ByVal path As String)
        Dim Struct As TFile
        Struct = New TFile

        Struct.Initialize()
        Dim i%, j%
        For i = 0 To 719
            Struct.TwoMinValues(i).Initialize(MaxNPVDatRecs)
        Next

        Struct.wParamCount = MaxNPVDatRecs 'количество датчиков

          path = path
        strFile = path & "npv" & CStr(date_Day) & ".dat"

        Dim TDataRecLigt As Int32 = Len(Struct.TwoMinValues(0).Values(0))
        Dim TDataRecsLigt As Int32 = Len(Struct.TwoMinValues(0))
        Dim StructLigt As Int32 = Len(Struct.TwoMinValues(0))

'получение длинны
        Dim ligt_ As Int32 = ((TDataRecLigt * MaxNPVDatRecs - 1) + TDataRecsLigt) * 719 + StructLigt
        Dim ligt As Int32 = ligt_ + 729 + 6 * MaxNPVDatRecs ' почему то приходится прибавлять 729 + 6 * MaxNPVDatRecs

        hFile = FreeFile()

        FileOpen(hFile, strFile, OpenMode.Random, OpenAccess.ReadWrite, , ligt)


        FilePut(hFile, Struct)
        FileClose(hFile)

    End Sub
 End Class


Автор: mr.DUDA 8.10.2007, 11:13
System.Runtime.InteropServices.Marshal.SizeOf(тип)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)