作者:同济黄正
http://websamba.com/hzhzhz
在VB文件读写处理中:
关于“输入超出文件尾”:
在For Input的情况下,因为只读,故当Input(strlen,#n)函数的输入超出了文件末尾,即Loc(n)+strlen>LOF(#n)时,会产生错误。例如:
Open PathName For Input As #n
Seek #n, LOF(n) + 1 '设置Loc,假设这是一个纯英文字符文件(字节数=字符数)
Str = Input(1, #n) '此时产生错误
在For Binary的情况下,因为既可读、也可写,故当InputB(blen,#n)函数的输入超出了文件末尾,即Loc(n)+blen>LOF(#n)时,并不会产生错误,但读入值的超出部分将以当前文件缓冲区的值来填充,结果使读入的值不符合文件本来的值。所以,应该控制blen的大小刚好为文件读写位置后面所剩余的字节数,才能准确读取文件。例如:
Open PathName For Binary As #n
Seek #n, LOF(n) + 1 '设置Loc
bytes = Input(100, #n) '此时不会产生错误,但bytes的内容不是该文件的
关于二进制连接:
二进制数组之间、二进制数组与InputB()函数之间不能直接用"&"连接运算,但是可以用MidB()、LeftB()等二进制字符函数处理后连接,并将之赋值给二进制数组。例如:
下列代码将出错:
Dim b1() As Byte, b2() As Byte, b3() As Byte
b1 = InputB(30, #n)
b2 = b1 & InputB(50, #n) '出错
b3 = b1 & b2 '出错
可以用如下代码实现二进制连接:
Dim b1() As Byte, b2() As Byte, b3() As Byte
b1 = InputB(30, #n)
b2 = MidB(b1, 1) & InputB(50, #n)
b3 = LeftB(b1, LenB(b1)) & MidB(b2, 1) '其实midb(b1,1)、leftb(b1,lenb(b1))与b1内容是相同的.
以上是我通过多次编程调试摸索出来的一些经验。呵呵,你是不是早就知道了?我一开始时就不知道这些,被一些程序错误搞的摸不着头脑,书上写得又太简单,根本不提这些问题,以至于走了很多弯路。希望此文能给初学者一些帮助。
http://fine3x.com