二进制文件
二进制文件按字节存储信息。因为文件中的字节可以代表任何东西,所以二进制访问能提供对文件的完全控制。一般需要使文件的大小尽量小时,应该使用二进制方式进行访问。
一、打开关闭二进制文件
(一)打开二进制的文件,使用以下Open 语句的语法:
Open <文件名> For Binary As <文件号>
通过使用二进制方式访问文件,可以使得磁盘空间的使用降到最小。因为二进制文件不需要固定长度的字段,类型声明语句可以省略字符串长度参数。
(二)关闭文件
与关闭顺序文件、随机文件的方法相同,都使用Close语句。
二、读写二进制文件
二进制文件的读写使用与随机文件相同的语句:
[Get|Put] [#]<文件号>,<插入位置>,<变量名>
其中:
(1) 变量名参数可以是任何类型的变量,包括可变长度的字符串以及用户自定义的类型。
(2) 插入位置参数指明Get或Put语句要处理的位置(文件中的第一个字节位置是1)
(3) 二进制存取方式由于可以使用长度可变字段,所以不能随机地访问记录。必须顺序访问记录以了解每一个记录的长度,这是二进制输入/输出的主要缺点。但是在这种文件模式下,可以直接查看文件中指定的字节,所以二进制模式也是唯一支持用户到文件的任何位置读写任意长度数据的方法。
为了可以同时使用随机文件和二进制文件的优点,可以使用这样的组合:当字段的长度固定或长度变换不大时,可以将这些字段存储在随机文件中,而对于长度变化很大的字段,可以保存在二进制文件中,而在随机文件的记录中设置一个字段指定它在二进制文件中的位置。这样,既可以利用随机文件的方便快捷,又可以大大节省磁盘空间。
例10-4定义了一个名为Person的变长记录,实现了在二进制文件中记录的写入以及读取。代码如下:
Private Type Person '定义字符串长度为变长的记录
ID As String
Name As String
End Type
Private user As Person
Private Sub Get_Click()
Open App.Path + "\bin.txt" For Binary As #1
txShow.Text = ""
Do While Loc(1) < LOF(1) '当前读取位置比文件长度小时进入循环
Get #1, , user
txShow.Text = txShow.Text + user.ID + Chr(13) + Chr(10)
txShow.Text = txShow.Text + user.Name + Chr(13) + Chr(10)
Close #1
End Sub
Private Sub Put_Click()
Open App.Path + "\bin.txt" For Binary As #1
user.ID = txId.Text
user.Name = txName.Text
Put #1, LOF(1) + 1, user '将记录添加到文件的末尾
Close #1
End Sub