Le fonctionnement de ce fichier est un tampon nul, puis une somme de contrôle utilisateur puis un octet qui vous donne le nombre de lettres du nom d'utilisateur, puis un octet pour le nombre d'octets à passer à l'utilisateur suivant et un octet pour quel utilisateur le fichier dans lequel l'utilisateur conserve ses paramètres.Lire un fichier bogue dans VB.NET?
La boucle avec la variable usersm dans l'instruction IF configure le flux de fichier entier pour l'extraction. Cependant, avec presque exactement le même code, la clause else spécifiquement le str.Read (xnl, 0, usn - 1) dans le code else semble lire le tout début du fichier malgré la position du flux de fichiers étant réglé plus tôt, quelqu'un sait Qu'est-ce qu'il se passe ici?
c'est dans VB2005
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
Son asinine que si vous manipuler le flux sous le lecteur de flux qu'il ne suit pas les changements, cela fonctionne merci – Jim
Pourquoi est-ce asinine? Comment le StreamReader le sait-il? Pour 99% des cas, vous * ne * gâchez pas le flux sous-jacent et la mise en mémoire tampon est très utile. Rappelez-vous également que tous les flux ne soutiennent même pas la notion de recherche ou de recherche de la position actuelle, ce qui rendrait la détection encore plus difficile. –
vous penseriez que si le pointeur interne a changé sur un flux que le lecteur de flux utilisait comme ressource qu'il mettrait à jour son propre pointeur. C'était quelque chose que je ne pensais pas devoir m'inquiéter. Dans ce programme, je dois sauter un peu pour obtenir les données dont j'ai besoin à la fois en octets et en chaînes – Jim