Vb.net 从二进制文件读取POD数据

Vb.net 从二进制文件读取POD数据,vb.net,Vb.net,我必须从二进制文件中读取POD数据,这方面有问题。很可能我不知道如何以提供的方式使用代码。MyFile的长度为1116字节,包含由VB在DOS中编写的propper数据,在DOS中我可以成功地读取它。 在显示的示例中,我希望读取每个记录的前65个字节。从65到124的字节在这里并不重要 Public Structure recStruct Dim code As Short <VBFixedString(27)>Dim name As String <V

我必须从二进制文件中读取POD数据,这方面有问题。很可能我不知道如何以提供的方式使用代码。MyFile的长度为1116字节,包含由VB在DOS中编写的propper数据,在DOS中我可以成功地读取它。
在显示的示例中,我希望读取每个记录的前65个字节。从65到124的字节在这里并不重要

Public Structure recStruct
    Dim code As Short
    <VBFixedString(27)>Dim name As String
    <VBFixedString(16)>Dim kat As String
    <VBFixedString(16)>Dim bcode As String
    Dim price As Single
End Structure
''-------------------------------------------------

    Dim REC_SIZE As Integer = 124

    Using fs As FileStream = New FileStream(myFile, FileMode.Open, FileAccess.Read)

        Dim f As Integer = CInt(fs.Length)
        Dim records As Integer = CInt(f / REC_SIZE)

        For t As Integer = 1 To records
            Dim seekpoint As Integer = (t - 1) * REC_SIZE

            '' on second step of loop when t=2
            '' program here breaks!

            fs.Seek(seekpoint, SeekOrigin.Begin)

            Using br As New BinaryReader(fs, New ASCIIEncoding())

                Dim s As New recStruct

                s.code = br.ReadInt16
                s.name = System.Text.Encoding.ASCII.GetString(br.ReadBytes(27))

                '' here I would like to skip 32 bytes
                '' instead of reading 'kat' and 'bcode' members

                s.price = br.ReadSingle
            End Using
        Next t
    End Using
公共结构重新构造
Dim代码为短代码
将名称设置为字符串
调暗kat作为字符串
作为字符串的Dim bcode
单一价格
端部结构
''-------------------------------------------------
Dim REC_大小为整数=124
将fs用作FileStream=新FileStream(myFile,FileMode.Open,FileAccess.Read)
尺寸f为整数=CInt(fs.长度)
作为整数的Dim记录=CInt(f/REC\U大小)
对于t,整数=1表示记录
Dim seekpoint作为整数=(t-1)*记录大小
当t=2时,在循环的第二步执行“”
“”这里的程序中断了!
搜索(seekpoint,SeekOrigin.Begin)
使用br作为新的二进制读取器(fs,New-ascienceoding())
Dim s作为新的recStruct
s、 代码=br.ReadInt16
s、 name=System.Text.Encoding.ASCII.GetString(br.ReadBytes(27))
“”在这里,我想跳过32个字节
“”而不是读取'kat'和'bcode'成员
s、 价格=br.ReadSingle
终端使用
下一个t
终端使用
所以这里我有两个问题。
1) 当t=1时,我可以从记录中读取数据,但当t增加时,程序在“fs.Seek(seekpoint,SeekOrigin.Begin)”行中断。
2) 如果不需要,如何跳过rdon所需的字节数而不浪费读取时间


如何使它以预期的方式工作,或者我在这里做错了什么?

您说它在
fs.Seek(…)
行中断。所以那么什么是例外?是的,我抓住了例外。因为结束使用流已关闭。我现在修好了。事实上,第一个问题解决了…我没有问你是否捕捉到了异常,我问的是什么样的异常。但既然你已经解决了,那就不重要了。