2016-03-15 128 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