请问VB如何读写二进制文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问VB如何读写二进制文件相关的知识,希望对你有一定的参考价值。

请问VB如何读写二进制文件

二进制文件的操作

所有文件的存储其实质都是二进制的,二进制文件往往由两部分组成,一部分是文件头另一部分存放了文件的内容。文件头通常存放与文件格式有关的信息,以BMP等图象文件为例,它们的文件头中存放了是何种图形格式、图象大小、调色板等信息,要显示图象时先读取文件头以获得文件的详细信息,然后再按其格式把图象内容显示出来。用二进制方式可以操作任何的文件,当然至关重要的一点是要清楚了解所操作文件的文件头结构。

VB中二进制文件操作主要应用的方法和函数有:Open,Close,Get,Put等。

Open:在For后面的打开模式要用Binary。

Close:关闭文件。

Get:在指定位置取得文件的内容,如果省略位置则从当前位置读取。

Put:在指定位置写入文件,如果省略位置参数就从当前位置写。

下面结合代码讲解二进制文件的操作。

下述程序完成了将两个文件结合成一个文件以及将这个结合后的文件再拆分成原来的两个文件。文件头的结构是自己定义的,非常简单,共8个字节(也就是两个长整型的长度),前4个字节存放第一个文件的长度,后4个字节存放第二个文件的长度。为了更直观地表达文件的结构,现假设有两个文件,第一个文件长度是100字节,第二个文件是200字节,那么合并后得到的文件应该是308字节。按顺序来看,文件的结构是:

4第一文件的长度

4第二文件的长度

100第一文件的二进制内容

200第二文件的二进制内容

除了文件头的8字节长度是固定的后面的长度都会因文件的不同而变化的。

‘实现文件的合并

Private Sub MergeFile()

Dim strFileName1 As String '第一个文件

Dim strFileName2 As String '第二个文件

Dim strOutput As String '合并后的文件

Dim aryContent() As Byte '用来读取文件的数组,每次读取前要重定义

strFileName1 = "c:\a.bmp"

strFileName2 = "c:\b.bmp"

strOutput = "c:\out.bmp"

'注意下面三个Open语句都是用Binary模式打开的

Open strOutput For Binary As #100

Open strFileName1 For Binary As #1

Open strFileName2 For Binary As #2

Put #100, , LOF(1) '取得第一文件的长度,并把它写入到合并文件的文件头中

Put #100, , LOF(2) '取得第二文件的长度,并写入到合并文件的文件头中

ReDim aryContent(LOF(1) - 1) '重定义数组,为读取文件做准备

Get #1, , aryContent() '取得第一文件的内容到数组

Put #100, , aryContent() '把第一文件的内容写到合并文件中

ReDim aryContent(LOF(2) - 1)

Get #2, , aryContent()

Put #100, , aryContent()

'关闭文件

Close #1

Close #2

Close #100

End Sub

‘实现文件的拆分

Private Sub SplitFile()

Dim strFileName1 As String

Dim strFileName2 As String

Dim strFileSplit As String

Dim aryContent() As Byte

Dim lngLOF(1) As Long '存放从文件头取得的两个文件的长度

strFileName1 = "c:\a2.bmp"

strFileName2 = "c:\b2.bmp"

strFileSplit = "c:\out.bmp"

Open strFileSplit For Binary As #100

Get #100, , lngLOF(0) '取得第一文件的长度

Get #100, , lngLOF(1) '第二文件的长度

Open strFileName1 For Binary As #1

Open strFileName2 For Binary As #2

ReDim aryContent(lngLOF(0)-1) '用第一文件的长度重定义数组,为读取第一文件做准备

Get #100, 9, aryContent() '从第9字节,即文件后面开始读取第一文件的内容

Put #1, , aryContent() '把取得的内容写入到拆分文件中

ReDim aryContent(lngLOF(1)-1)

Get #100, 9 + lngLOF(0) + 1, aryContent() '从第9字节再加上第一文件的长度处开始读取第二文件的内容,这里可以清楚地看到文件头的作用了

Put #2, , aryContent

Close #1

Close #2

Close #100

MsgBox "拆分完成。", vbInformation

文本文件由于没有格式所以它的读写都比较简单和直观,而用二进制操作文件时其实质就是对文件头的理解,如果不知道文件头的结构那就无法对文件进行处理了,知道了文件头所包含的信息后,对文件的操作其实就是按规则进行Get、Put罢了。
参考技术A 这样写:
open "aa.dat" for binary as #1 '以二进制形式打开

close #1 '关闭文件

还有相关的语句:
get#1, i, var
put#1, i, var
参考技术B Open "文件名" For Binary Access Read Write As #1
close #1
读取:get #1,字节编号,数据
写入:put #1,字节编号,数据

请问vb中如何查找程序里面的多个文本框(或其他控件)的句柄啊?

现在用findwindow可以查出程序的句柄,但是这个程序有很多的文本框,怎样能准确的查询每一个文本框的句柄啊,并且怎么确定和程序中文本框的对应关系啊!
谢谢牛A和牛C间徘徊朋友的回答,但是一个窗口有很多很多文本框,这样的确能查出句柄,但是怎么能做到准确定位那?能不能给个例子看看??谢谢

参考技术A 用findwindowex递归调用找出所有窗口内的控件,再用GetClassName根据要求找出类名

以上是关于请问VB如何读写二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

请问vb如何以二进制形式读取一个字节到一个变量中?

c语言如何读写二进制

Delphi中SQLite如何读写二进制字段(Blob类型)

VB6.0中如何实现逐行读入文本文件?

vb读写ini文件

Delphi 读写注册表