Sub opencas()
 Dim filename, zlong
 ' On Error Resume Next
   filename = prjname & ".cas"
  Open filename For Input As #1
    If Err Then
        MsgBox "不能打开文件:  " + filename
        Exit Sub
    End If
    ' 改变鼠标指针显示类型为沙漏。
    Screen.MousePointer = 11
         If FileLen(filename) > 65000 Then
            MsgBox "文件太大,无法打开。"
            Exit Sub
        End If
    Frmtext.rtext.Text = StrConv(InputB(LOF(1), 1), vbUnicode)
    Close #1
    ' 重新设置鼠标指针。
    Screen.MousePointer = 0
    WriteRecentFiles (filename)
    Frmtext.Show
End Sub
上述代码不能打开一个.cas的小文件,但将filename修改后能打开一个其他更大的文件
两文件都不到50K?

解决方案 »

  1.   

    操作的是二进制文件吧?二进制文件不能用 input 来读的。试试:dim fbyt() as byte
    open "文件" for binary as #1
    redim fbyt(lof(1)-1)
    get #1,,fbyt
    close #1Frmtext.rtext.Text = strconv(fbyt,vbunicode)
      

  2.   

    试试:
    Frmtext.rtext.Text = Input(LOF(1), 1)
      

  3.   

    1、不是二进制文件
    2、该文件足够小,反正能用记事本打开
    3、Frmtext.rtext.Text = Input(LOF(1), 1)也报同样的错误。
      

  4.   

    能用记事本打开,不等于它不是二进制文件。你随便将一个.exe改成.txt就能用记事本打开,但是如果用你的代码去读,就会报超出文件尾;如果用我那段代码读,就不会出错。
      

  5.   

    经过测试,如果文件中存在 chr(0) 这个字节,inputb 就会出错。Open "e:\tmp\aa.txt" For Binary As #1
    Put #1, , "abc"
    Put #1, , Chr(0)    '写入一个 chr(0) 特殊字符
    Put #1, , "123"
    Close #1'以上代码生成的 aa.txt 可以用记事本打开Open "e:\tmp\aa.txt" For Input As #1
    Debug.Print StrConv(InputB(LOF(1), 1), vbUnicode)   '此处报错,如果不写 chr(0)则不会
    Close #1所以读文件保险的办法应该是 binary 方式,除非你能确定它的格式或它不含特殊字符。