我不知道发生了什么。我认为我根本没有修改代码,但是由于某种原因,在使用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会做什么)。
我在一个文件上测试了它,它看起来很好用。但出于某种原因,它不想再工作了。我不认为我改变了什么--但是现在它用空格返回变化。
例如:
我有一个附加了'9999‘的文件。当我运行Encoding.ASCII.GetString例程时,它显示为:‘9-9-9’。
我觉得我在为一些很简单的事情而把头撞在墙上。希望有人能很快知道答案。
发布于 2016-10-25 20:01:00
当"9999“写入文件时,您将得到‘9999’,这一事实表明,任何写入文件的内容都使用UTF-16编码,该编码每个字符至少使用两个字节(ref:维基百科: Unicode编码的比较)。
使用十六进制编辑器检查文件时,应该会发现实际情况是否如此。
请注意Encoding.Unicode性质中的备注,以防有什么东西可能导致问题。
https://stackoverflow.com/questions/40248226
复制相似问题