vb.net文件流在解码字节后获取空格

时间:2016-10-25 19:34:19

标签: vb.net filestream

我不确定发生了什么。我根本不认为我改变了代码,但由于某种原因,在使用FileStream对象读取文件的字节后,我在返回的字符之间得到了空格:

'Turn off Raise Events until after change is checked
        fsw.EnableRaisingEvents = False

        'read from current seek position to end of file
        Dim bytesRead(_maxBytes) As Byte


        Dim fs As New FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

        If (fs.Length > _maxBytes) Then
            previousSeekPosition = fs.Length - _maxBytes
        End If

        previousSeekPosition = fs.Seek(previousSeekPosition, SeekOrigin.Begin)

        Dim numBytes = fs.Read(bytesRead, 0, _maxBytes)

        fs.Close()

        previousSeekPosition += numBytes

        Dim sb As New StringBuilder()
        For i = 0 To numBytes - 1
            sb.Append(bytesRead(i))
        Next

        'Raise the event to show data
        If Not blnFirstRun Then
            RaiseEvent MoreData(Me, Encoding.ASCII.GetString(bytesRead, 0, _maxBytes), _filename, _fileDescription)
        Else
            blnFirstRun = False
        End If

        'Check the changes against the alerts
        AlertChange(Encoding.ASCII.GetString(bytesRead, 0, _maxBytes))

        'Turn Raise Events back on
        fsw.EnableRaisingEvents = True

我将_maxBytes设置为16384.我基本上是在文件发生变化时从最后一个已知的读取位置读取文件(类似于Linux Tail会做的)。

我在一个文件上测试了它,看起来效果很好。但是出于某种原因,它不再想要工作了。我没有认为我改变了任何东西 - 但它现在返回带有空格的变化。

例如:

我有一个我附加的文件' 9999'至。当我运行Encoding.ASCII.GetString例程时,它显示为:' 9 9 9 9'。

我觉得我可以用头撞墙,因为这可能很简单。希望有人能快速知道答案。

1 个答案:

答案 0 :(得分:0)

你得到的事实是9 9 9 9'什么时候" 9999"写入文件表明,无论写入文件的是什么,都使用UTF-16编码,每个字符至少使用两个字节(参考:Wikipedia: Comparison of Unicode encodings)。

使用十六进制编辑器检查文件应该揭示实际情况是否确实如此。

请注意Encoding.Unicode Property中的评论,以防万一有可能导致问题的内容。