Die Art, wie diese Datei funktioniert, ist ein Null-Puffer, dann eine Benutzerprüfsumme, dann ein Byte, das Ihnen die Anzahl der Benutzernamen gibt, dann ein Byte für wie viele Bytes zum nächsten Benutzer und ein Byte für welchen Benutzer Datei, in der der Benutzer seine Einstellungen behält.Lesen eines Dateifehlers in VB.NET?
Die Schleife mit der Variablen usersm in der IF-Anweisung richtet den gesamten Dateistream für die Extraktion ein. Aber mit fast genau dem gleichen Code scheint die else-Klausel speziell str.Read (xnl, 0, usn - 1) im else-Code den Anfang der Datei zu lesen, obwohl die Position des Filestreams früher gesetzt wurde Was passiert hier?
dies in VB2005 ist
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
Sein asinine, dass, wenn Sie den Stream unter dem streamreader manipulieren, dass es nicht mit den Änderungen Schritt hält, funktioniert das Dankeschön – Jim
Warum ist es asinine? Wie würde der StreamReader wissen? In 99% der Fälle * verwirren * Sie sich nicht mit dem zugrunde liegenden Stream und die Pufferung ist sehr hilfreich. Denken Sie auch daran, dass nicht alle Streams sogar die Suche nach der aktuellen Position unterstützen, was die Erkennung noch schwieriger machen würde. –
Sie würden denken, dass, wenn der interne Zeiger in einem Stream geändert wird, den der streamreader als Ressource verwendet, dass es seinen eigenen Zeiger aktualisieren würde. Das war etwas, von dem ich nicht dachte, dass ich mir Sorgen machen musste. In diesem Programm muss ich ein wenig herumspringen, um die Daten zu erhalten, die ich sowohl in Bytes als auch in Strings benötige. – Jim