2016-03-15 39 views
0

這是我在VB5中使用的。我如何在VB.net(2015)中做同樣的事情?vb.net讀取二進制文件

在所有變量的維度上,以下VB5代碼讀取打開爲#2的二進制文件中的前四個字節以填充li(4)數組。

For i = 1 To 4 
mychar = InputB(1, #2) 'Get one character. 
li(i) = AscB(mychar) 
Next 

然後我打電話給我liconvert(A,B,C,d)函數來獲得由該文件中的前四個字節表示的長整數 並返回該號碼爲「T」

t = Val(liconvert(li(1), li(2), li(3), li(4))) 

我會從這裏做什麼需要更多的代碼。我只需要得到這個。

+1

https://msdn.microsoft.com/en-us/library/system.io.filestream.read(v=vs.110).aspx –

+0

一旦你調用了'FileStream.Read'來獲得前四個'文件中的字節',你可以使用'BitConverter'類將這四個'byte's轉換爲'long'。 – jmcilhinney

回答

0

除了jmcilhinney的評論,您可以使用BinaryReader來讀取文件中的值。看到這個例子:

Public Sub ReadBinary() 
    Using strm As New FileStream("c:\test\filename.bin", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 
     Using rdr As New BinaryReader(strm) 
      'Read integer and byte vaules from the file 
      Dim i As Integer = rdr.ReadInt32() 
      Dim l As Long = rdr.ReadInt64() 
      Dim b As Byte = rdr.ReadByte() 

      'Read 100 bytes from the file 
      Dim bytes(99) As Byte 
      Dim bytesRead As Integer = rdr.Read(bytes, 0, 100) 
     End Using 
    End Using 
End Sub 

BinaryReader具有除了此處顯示的其他方法。

+0

謝謝。沒有工作。我用我自己的路徑/文件複製了替換文件名的代碼,並添加了一個文本框以顯示「bytesRead」的值。當我調用Sub時,文本框只顯示值「100」。如果我將「(字節,0,100)」更改爲「(字節,0,4)」,則文本框顯示「4」。我需要的是程序讀取文件並按順序獲取文件中每個字節的ASCII值的方法。例如,如果二進制文件開始爲「aq7B ....」,我可以用97,113,7,66的ASCII等價物填充一個數組。我敢肯定我很接近但錯過了一些東西。 – user3029051

+0

好了,現在我明白我所做的。我的文本框只顯示從文件中讀取的字節數,DUH !.如何獲取字節的ASCII值到數組中? – user3029051

+0

好的。我已經部分理解了它。字節(99)數組確實包含二進制文件中的字符。這就是我需要的。但是,由於某種原因,字節(0)實際上是我的文件中的第15個字節。我試圖找出那一個。 – user3029051

0

從一開始,我從你那裏得到了更多的東西,並且發現了這個代碼,它似乎正是我所需要的。

Public Sub ReadBinaryII() 
' Get the file name. 
Dim file_name As String = "xxx.xxx" 
' Open the file. 
Dim fs As New FileStream(file_name, FileMode.Open) 
' Create a BinaryReader for the FileStream. 
Dim binary_reader As New BinaryReader(fs) 
fs.Position = 0 
' Read the data as a byte array. 
Dim bytes() As Byte = binary_reader.ReadBytes(20) 
' Print the byte data to a text box 
myForm.Txt1.Text = bytes(0) & "/" & bytes(1) & "/" & bytes(2) & "/" & bytes(3) 
binary_reader.Close() 
fs.Dispose() 
End Sub 

任何警告或補充?非常感謝!

+0

我建議在Using塊中創建您的閱讀器和文件流,以便在完成時自動關閉/處理它們。 –

+0

謝謝克里斯。我會去做。 – user3029051