何が起きているのか分かりません。私は全くのコードを変更するとは思わないが、私は、ファイルのバイトを読み取るためにFileStreamオブジェクトを使用した後に返された文字の間にスペースを取得しています何らかの理由:vb.netバイトをデコードした後にファイルストリームに空きがあります
'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が設定されています私は基本的に、ファイルの変更があるときはいつでも、最後の既知の読み込み場所からファイルを読み込んでいます(Linux Tailがやることに似ています)。
ファイルでテストしたところ、うまくいきました。何らかの理由で、それはもはや働きたくありません。私はしないと思う私は何かを変更しました - しかし、今はスペースで変更を返すようになりました。例えば
:
私は私が「9999」を追加したファイルを持っています。 Encoding.ASCII.GetStringルーチンを実行すると、 '9 9 9 9'と表示されます。
私は壁に頭を打っているような気がします。うまくいけば、誰かが答えを素早く知っていることを望みます
一見すると、ファイルに "9999"と書いたものがUTF-16エンコーディングを使用していることを示唆しています。独立した意見のために16進エディタでファイルを調べる必要があります。 –
ああ、なかなか簡単です。はい、encoding.unicode.getstringに変更しても問題ありません。あなたは答えを作成してください、私はそれを選択してくださいできますか? – Andrew