要定义好data的数据类型及其大小, 一个例子:dim arrBuff() as byte
dim fn as longRedim arrBuff(FileLen(strFileName))fn = FreeFile
Open strFileName For Binary Access Read Write As fn
Get fn, , arrBuff()
Close fn

解决方案 »

  1.   

    在VB中一定要记住,不能使用String变量处理二进制数据。早期的VB是采用单字节处理方式(通常也称为ANSI方式),也就说一个英文字母用一个字节表示,一个汉字算两个字节,当然这样就可能出现半个汉字的问题。从VB 4.0起,VB采用了一种新的处理方式,即内部采用Unicode方式,即不论英文字母还是汉字,一律用两个字节表示,但Unicode还不够普及,所以VB只是在其内部完全使用Unicode,而在外部仍转换为人们习惯的ANSI方式,但在字符串处理上与先前的版本有所不同。例如:在中文Windows或英文Windows外挂RichWin 97中,Len("电子&电脑")=5(这里的&号为半角字符),而在以前的版本或纯英文Windows中Len("电子&电脑")=9。除了Len、Left、Right等字符串函数受此影响外,所有字符操作都受此影响。如果你把二进制数据读入字符串变量,在读入的过程中会发生转换错误,这样你再写入文件数据也就不对了。以上的讨论对于中文等双字节系统都是适用的,但英文版下没有这个问题。所以,你在网上看到的许多程序因为都是美国人写的,他们根本就不考虑这个问题,使用字符串来处理二进制数据,但这样的程序在中文系统中肯定出错。解决的办法是使用Byte数组来处理二进制数据,这样就不会有你说的问题了。例如: 
         Dim n As Long 
         Dim arrBytes() As Byte 
         
         Open "c:\win98\setup.bmp" For Binary As 1 
         n = LOF(1) 
         ReDim arrBytes(1 To n) As Byte 
         Get 1, , arrBytes 
         Close 1 
         
         If arrBytes(1) = Asc("B") And arrBytes(2) = Asc("M") Then 
         MsgBox "这是一个位图文件。" 
         End If 
      

  2.   

    定义好你的data数组的类型(as byte)
      

  3.   

    用二进制读文件时如果你用的数组类型不对,在进行编码转换时会出现不可预知结果,比如可能把一个汉字的后半部分和下一个汉字的前半部分算成一个,也可能干脆是乱码,长度计算上也会出现不定的结果.所以视你的文件内容来定数组的类型,用二进制打开的话要定义为byte型.
      

  4.   

    试试这样
    Dim data() As Byte
        Open filename For Binary As #1
            data = Input(LOF(1), 1)
        Close #1
      

  5.   

    读取:
    Dim TempFile As Long
    Dim LoadBytes() As ByteTempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Redim LoadBytes(1 To Lof(TempFile)) As Byte
    Get #TempFile,,LoadBytes
    Close TempFileText1.Text=StrConv(LoadBytes,vbUniCode)写入:
    Dim TempFile As Long
    Dim SaveBytes() As ByteSaveBytes=StrConv(Text1.Text,vbFromUniCode)TempFile=FreeFile
    Open 文件名 For Binary As #TempFile
    Put #TempFile,,SaveBytes
    Close TempFile