二进制文件的操作是最基础,最简单,也是最强悍的.
我们先来看看相关语法,Open语句:
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
各个部分的含义如下:
pathname 必要的字符串表达式,指定带路径的文件名.
mode 必要关键字,指定文件方式Append,Binary,Input,Output或Random方式.如果未指定方
式,则以 Random 访问方式打开文件.
access 可选关键字,说明打开的文件进行的操作.有Read,Write或Read Write 操作.
lock 可选关键字,说明限定于其它进程打开的文件的操作,有Shared,Lock Read,Lock Write和
Lock Read Write 操作.
filenumber 必要一个有效的文件号,范围在1到511之间.使用FreeFile 函数可得到下一个可用的文件号.
reclength 可选小于或等于32767(字节)的一个数. 对于用随机访问方式打开的文件,该值就是记录长度
对于顺序文件,该值就是缓冲字符数.
*如果 pathname 指定的文件不存在,则用Append,Output或Random方式打开文件时,可以建立这一文件.
*如果文件已由其它进程打开,而且不允许指定的访问类型,则 Open 操作失败,而且会有错误发生.
*如果 mode 是 Binary 方式,则 Len 子句会被忽略掉.在Binary,Input 和Random方式下可以用不同的文件号打开同一文件,而不必先将该文件号关闭.在Append 和Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件号.
相关操作语句:
Get 语句,将一个已打开的磁盘文件读入一个变量之中.
语法
Get [#]filenumber,[recnumber],varname
各部分含义如下:
filenumber必要的有效文件号
recnumber 可选Variant (Long)记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表
示在此处开始读出数据
varname 必要一个有效的变量名,将读出的数据赋值给该变量.
Put语句正好是Get的反过程.
例子一:
打开一个二进制文件,读取每一个字节的值.
Dim f As Integer,b() As Byte
Dim i as Long
f = FreeFile
Open app.Path & "/1.dat" for Binary As #f
i = lof(f)
Redim b(1 to f)
For i = 1 to lof(f)
Get #f,i,b(i)
Next i
Close #f
例子二:
修改某个二进制文件特定字节的值,比如PlantsVSZombies(植物大战僵尸)这个游戏的存档文件,我们要修改它的金钱.金钱在User2.dat中,偏移量(OffSet)为00000008到0000000B四个字节,即一个Long.但是游戏最小金钱单位是10所以只要写入99999游戏中就显示999990了.
Open App.Path & "/user2.dat" For Binary As #1
Put #1,CLng(99999)
Close #1
这里我们直接写入一个Long,而不是单个字节的写,那样麻烦.好了开始有人想写修改器了.
Seek 语句可以用来获取当前读取的位置,目前我感觉没多大用处,所以就不说了.