本帖最后由 vbbaris 于 2012-03-21 12:55:35 编辑

解决方案 »

  1.   

    可以使用LenB啊
    Len 函数
          返回 Long,其中包含字符串内字符的数目,或是存储一变量所需的字节数。语法Len(string | varname)Len 函数的语法有下面这些部分:部分 说明 
    string 任何有效的字符串表达式。如果 string 包含 Null,会返回 Null。 
    Varname 任何有效的变量名称。如果 varname 包含 Null,会返回 Null。如果 varname 是 Variant,Len 会视其为 String 并且总是返回其包含的字符数。 
    说明两个可能的参数必须有其一(而且只能有其一)。如为用户定义类型,Len 会返回其写至文件的大小。注意   LenB 函数作用于字符串中的字节数据,如同在双字节字符集(DBCS)语言中一样。所以 LenB 返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB 返回在内存中的大小,包括元素之间的衬垫。对于使用 LenB的示例代码,请参阅示例主题中的第二个示例。注意 当在用户自定义数据类型中使用变长字符串时,Len 可能不能确定实际存储所需的字节数目。
      

  2.   

    由于VB在内存中把任何字符用两个字节存储,不管什么格式的文件,直接用LenB获取的字节数均为2。因此我就没有用LenB(因为这UTF8文件中也有3字节的字符)。
    现在我放弃循环读取每个字符的方法,试着用了字符串转换语句 LenB(StrConv(Str,&H80)),正确算出来了Line Input读取的整个一行内容的字节数。这个语句只能对UTF8和Ansi格式文件有效,Unicode格式文件算出来的又是错误。问题总算是个解决了,不过Unicode格式文件的错误不太懂,或许Line Input不支持Unicode读取??