前端之家收集整理的这篇文章主要介绍了
VB读取/改写二进制文件,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Open 语句
能够对文件输入/输出 (I/O)。
语法
Open pathname For mode [Access access] [lock] As [#]filenumber [Len=reclength]
Open 语句的语法具有以下几个部分:
部分 描述
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 可选。小于或等于 32,767(字节)的一个数。对于用随机访问方式打开的文件,该值就是记录长度。对于顺
序文件,该值就是缓冲字符数。
说明
对文件做任何 I/O 操作之前都必须先打开文件。Open 语句分配一个缓冲区供文件进行 I/O 之用,并决定缓冲区所使用的
访问方式。
如果 pathname 指定的文件不存在,那么,在用 Append、Binary、Output、或 Random 方式打开文件时,可以建立
这一文件。
如果文件已由其它进程打开,而且不允许指定的访问类型,则 Open 操作失败,而且会有错误发生。
如果 mode 是 Binary 方式,则 Len 子句会被忽略掉。
重要 在 Binary、Input 和 Random 方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在 Append 和
Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。
Get 语句
将一个已打开的磁盘文件读入一个变量之中。
语法
Get [#]filenumber,[recnumber],varname
Get 语句的语法具有以下几个部分:
部分 描述
filenumber 必要。任何有效的文件号。
recnumber 可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表示在此处开
始读出数据。
varname 必要。一个有效的变量名,将读出的数据放入其中。
说明
通常用 Put 将 Get 读出的数据写入一个文件。
文件中第一个记录或字节位于位置 1,第二个记录或字节位于位置 2,依此类推。若省略 recnumber,则会读出紧随上一个
Get 或 Put 语句之后的下一个记录或字节(或读出最后一个 Seek 函数指出的记录或字节)。所有用于分界的逗号都必须
罗列出来,例如:
Get #4,FileBuffer
下列规则适用于以 Random 方式打开的文件:
如果要读出的数据的长度小于 Open 语句的 Len 子句中所指定的长度,Get 会在某个边界之内读出随后的记录,在这里,
边界的长度等于记录的长度。将此文件缓冲区内的现有内容填入到一个空间之内,该空间介于一个记录的结尾与下一个记录
的开头之间。因为无法确定填入的数据量,所以,应设法使记录的长度与读出的数据长度一致,这通常是个好办法。
如果读出的变量是一个可变长度字符串,则 Get 语句先读出一个含有字符串长度的双字节描述符,然后读出放入变量中的数
据。所以,Open 语句中的 Len 子句所指定的记录长度必须至少比字符串的实际长度多两个字节。
如果读出的变量是一个数值类型的 Variant,则 Get 先读出两个字节,识别 Variant 的 VarType,然后读出放入此变量
中的数据。例如,在读出 VarType 3 的 Variant 时,Get 读出六个字节:前两个字节说明 Variant 为 VarType 3
(Long),后四个字节则包含 Long 类型数据。Open 语句中的 Len 子句所指定的记录长度必须至少比储存变量所需的实际
长度多两个字节。
注意 可以使用 Get 语句从磁盘中读出一个 Variant 数组,但不能使用它读出包含数组的标量 Variant。也不能使用 Get
从磁盘中读出对象。
如果读出的变量是 VarType 8 (String) 的 Variant,则 Get 先读出两个字节,识别 VarType,接下来的两个字节指出字
符串的长度,然后读出字符串数据。Open 语句中的 Len 子句所指定的记录长度必须比实际字符串的长度至少多四个字节。
如果读出的变量是一个动态数组,则 Get 会读出一个描述符,其长度等于 2 加上 8 乘以维数,
即 2 + 8 * NumberOfDimensions。读出数组数据和数组描述符就需要占据字节,而 Open 语句中的 Len 子句所指定的
记录长度必须大于或等於这些字节数的总和。 例如,在将数组写入磁盘时,下列数组声明需要 118 个字节:
Dim MyArray(1 To 5,1 To 10) As Integer
这 118 个字节的分配情况如下:18 个字节用于描述符 (2 + 8 * 2),100 个字节用于数据 (5 * 10 * 2)。
如果读出的变量是一个大小固定的数组,则 Get 只读出数据。它不读出描述符。
如果读出的变量是任何其他类型的变量(不是可变长度的字符串或 Variant£©,则 Get 只读出变量数据。Open 语句
中的 Len 子句所指定的记录长度必须大于或等於要读出的数据的长度。
Get 在读出用户定义类型的元素时,好象是单独地读出每一个元素,只是不在元素之间进行填充。在磁盘上,(用 Put 写入
的)用户定义的类型的动态数组之前有一个描述符,其长度等于 2 加上 8 乘以维数,即 2 + 8 * NumberOfDimensions。
Open 语句中的 Len 子句所指定的记录长度必须大于或等於读出个别元素(包括任何数组及其描述符在内)所需的全部字节数总和。
对于以 Binary 方式打开的文件,Random 的所有规则都适用,但以下情况除外:
当 Open 语句中的 Len 子句不起作用时,Get 连续从磁盘中读出所有变量;也就是说,两个记录之间没有任何填充。
对于任何不属于用户定义的类型的数组,Get 只读出数据。它不会读出描述符。
Get 读出可变长度字符串,不管这些字符串是否具有长度为 2 字节的描述符,它们都不是用户定义的类型的元素。所读出的
字节数等於字符串已包含的字符数。例如,下列语句从文件号为 1 的文件中读出十个字节:
VarString = String(10,)
Get #1,VarString
读
Dim bit() As Byte
Open Mypicture For Binary As #1
ReDim bit(LOF(1)) As Byte
Get 1,1,bit
Close 1
写:
Open Mypicture For Binary As #1
put 1,yourdata
Close 1
Dim bit() As Byte
要实现你的要求,可这样:
读
Open Mypicture For Binary As #1
ReDim bit(LOF(1)) As Byte
Get 1,bit
Close 1
Dim bit() As Byte
'查找40H并换成FFH
For I = 0 To UBound(bit)
if bit(i)=64 then
bit(i)=256
end if
Next
'最后写入
Dim bit() As Byte
Open Mypicture For Binary As #1
put 1,bit
Close 1
Dim bit() As Byte
dim file1 as integer
dim temp as byte
open "filename" for binary access read write as file1
temp=&hff
put &h40,temp
close(file1)
dim file1 as integer
dim temp as byte
file1=freefile
open "filename" for binary access read write as file1
temp=&hff
put &h40,temp==>put file1,&h40,temp
close(file1)
原文链接:https://www.f2er.com/vb/263249.html