首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VB.NET中读取文件错误?

在VB.NET中读取文件错误?
EN

Stack Overflow用户
提问于 2009-05-27 02:07:34
回答 1查看 179关注 0票数 0

这个文件的工作方式是有一个空缓冲区,然后是一个用户校验和,然后是一个字节,它给出了用户名字母计数,然后是一个字节,表示跳到下一个用户的字节数,以及一个字节,用户在其中保存他们的设置。

IF语句中带有usersm变量的循环设置用于提取的整个文件流。然而,使用几乎完全相同的代码else子句,特别是else代码中的str.Read(xnl,0,usn - 1)似乎正在读取文件的最开始,尽管文件流的位置是在前面设置的,有人知道这里发生了什么吗?

这是用vb2005编写的

代码语言:javascript
复制
Private Sub readusersdata(ByVal userdatafile As String)
    ListView1.BeginUpdate()
    ListView1.Items.Clear()
    Using snxl As IO.Stream = IO.File.Open(userdatafile, IO.FileMode.Open)

        Using str As New IO.StreamReader(snxl)
            str.BaseStream.Position = 4
            Dim usersm As Integer = str.BaseStream.ReadByte()
            Dim users As Integer = usersm
            While users > 0
                If usersm = users Then
                    Dim trailtouser As Integer = 0
                    str.BaseStream.Position = 6
                    Dim ust As Integer = str.BaseStream.ReadByte()
                    str.BaseStream.Position = 8
                    Dim snb(ust - 1) As Char
                    str.ReadBlock(snb, 0, ust)
                    Dim bst = New String(snb)
                    If usersm = 1 Then
                        str.BaseStream.Position = 16
                    Else
                        str.BaseStream.Position = 15
                    End If
                    cLVN(ListView1, bst, str.BaseStream.ReadByte)
                    str.BaseStream.Position = 8 + snb.Length
                    str.BaseStream.Position += str.BaseStream.ReadByte + 1
                Else

                    Dim usn As Integer = str.BaseStream.ReadByte
                    str.BaseStream.Position += 2
                    Dim chrpos As Integer = str.BaseStream.Position
                    Dim xnl(usn - 1) As Char
                    str.Read(xnl, 0, usn - 1)
                    Dim skpbyte As Integer = str.BaseStream.ReadByte
                    str.BaseStream.Position += 3
                    Dim udata As Integer = str.BaseStream.ReadByte


                End If

                users -= 1

            End While
        End Using
    End Using
    ListView1.EndUpdate()
End Sub
EN

Stack Overflow用户

回答已采纳

发布于 2009-05-27 05:24:55

当你改变底层流的位置时,StreamReader不知道你已经这样做了。如果它之前读取了“太多”的数据(出于效率的考虑,它故意避免在底层流上进行大量的少量读取),那么它将使用缓冲数据,而不是直接与重新定位的流对话。您需要在重新定位流之后调用StreamReader.DiscardBufferedData来避免这种情况。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/913630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档