dim mem as string 
open "c:\123.txt" for binary access read as #1 
mem =space(1024)
get #1,,mem
这时你用loc(1)去看文件指针根本不在1024,绝对是超过1024,如果
mem=space(1),这样就不会有问题。

解决方案 »

  1.   

    那你们Put #1,,string(1000,"*")再debug.pring loc(i)试试,绝对不在1000
      

  2.   

    字节与字符的区别
    你的"c:\123.txt"前1024个字符中含有中文字符loc(1)-len(mem) 个,若是纯英文字符文本文件就不会存在这个问题。
      

  3.   

    这样读比较好:Private Sub Command1_Click()
    Dim arrb() As Byte, mem As String
         Open "c:\123.txt" For Binary As #1
         ReDim arrb(1 To LOF(1))
         Get #1, , arrb
         Close 1
         mem = StrConv(arrb, vbUnicode)
         Erase arrb
    End Sub
      

  4.   

    northwolves(狼行天下) :
    好像不是你说的那样子,因为你的理由解决不了:
    Put #1,,string(1000,"*")再debug.pring loc(i)
    因为这里面根本没有中文字符。
      

  5.   

    变量定义的问题。MSDN:Variant 总保持 16 位,无论其中存储了什么数据。对象、字符串和数组,在物理上并非存于 Variant 之中;在这些情况下,用四个字节的 Variant 来保持对象引用、或者字符串或数组的指针。而真正的数据存在其它地方。比较一下:
    Private Sub Command1_Click()
    Dim MEM As String
    MEM = String(1000, "*")
    Open "c:\1234.txt" For Binary As #1
    Put #1, , MEM
    MsgBox Loc(1) 'return 1000
    Close 1
    End SubPrivate Sub Command2_Click()
    Open "c:\1234.txt" For Binary As #1
    Put #1, , String(1000, "*") 
    MsgBox Loc(1)' return 1004
    Close 1
    End Sub可见,有4 个字节用于指针的保存
      

  6.   

    直接 Put #1, , String(1000, "*")可能按VARIANT 处理了 所以推荐显式的定义变量和赋值。
      

  7.   

    我也是这样估计,很可能就是指针的地址,我现在把mem设为byte,就不会出现这种问题了,
      

  8.   

    northwolves(狼行天下) ,谢谢你了!