我不确定发生了什么。我根本不认为我改变了代码,但由于某种原因,在使用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'。
我觉得我可以用头撞墙,因为这可能很简单。希望有人能快速知道答案。
答案 0 :(得分:0)
你得到的事实是9 9 9 9'什么时候" 9999"写入文件表明,无论写入文件的是什么,都使用UTF-16编码,每个字符至少使用两个字节(参考:Wikipedia: Comparison of Unicode encodings)。
使用十六进制编辑器检查文件应该揭示实际情况是否确实如此。
请注意Encoding.Unicode Property中的评论,以防万一有可能导致问题的内容。