首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码字节后vb.net Filestream获取空间

解码字节后vb.net Filestream获取空间
EN

Stack Overflow用户
提问于 2016-10-25 19:34:19
回答 1查看 39关注 0票数 0

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

代码语言:javascript
复制
'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会做什么)。

我在一个文件上测试了它,它看起来很好用。但出于某种原因,它不想再工作了。我不认为我改变了什么--但是现在它用空格返回变化。

例如:

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

我觉得我在为一些很简单的事情而把头撞在墙上。希望有人能很快知道答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-25 20:01:00

当"9999“写入文件时,您将得到‘9999’,这一事实表明,任何写入文件的内容都使用UTF-16编码,该编码每个字符至少使用两个字节(ref:维基百科: Unicode编码的比较)。

使用十六进制编辑器检查文件时,应该会发现实际情况是否如此。

请注意Encoding.Unicode性质中的备注,以防有什么东西可能导致问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40248226

复制
相关文章

相似问题

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