2016-10-25 3 views
0

何が起きているのか分かりません。私は全くのコードを変更するとは思わないが、私は、ファイルのバイトを読み取るために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'と表示されます。

私は壁に頭を打っているような気がします。うまくいけば、誰かが答えを素早く知っていることを望みます

+0

一見すると、ファイルに "9999"と書いたものがUTF-16エンコーディングを使用していることを示唆しています。独立した意見のために16進エディタでファイルを調べる必要があります。 –

+0

ああ、なかなか簡単です。はい、encoding.unicode.getstringに変更しても問題ありません。あなたは答えを作成してください、私はそれを選択してくださいできますか? – Andrew

答えて

0

「9999」がファイルに書き込まれたときに「9 9 9 9」と表示されるという事実は、ファイルに書いたものがUTF-16エンコーディングを使用していたことを示しています。 :Wikipedia: Comparison of Unicode encodings)。

ファイルを16進エディタで調べると、それが実際に当てはまるかどうかが明らかになります。

問題が発生する可能性がある場合に備えて、Encoding.Unicode Propertyの備考に注意してください。

関連する問題