惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
博客园 - Franky
Martin Fowler
Martin Fowler
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
The Cloudflare Blog
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
宝玉的分享
宝玉的分享
J
Java Code Geeks
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
MongoDB | Blog
MongoDB | Blog
腾讯CDC
博客园_首页
博客园 - 司徒正美
D
DataBreaches.Net
I
InfoQ
GbyAI
GbyAI
IT之家
IT之家
罗磊的独立博客

博客园 - ZhaoYG

大家好,本人现有信息系统项目管理师、系统分析师证书,诚寻挂靠 asp.net 2.0 下集成OCX 全过程 我很欣慰,Vista下终于能用rose了 新版勘验图发布 赞! 勘验图系统(GDI+绘图) 转:在自己的工具条中使用ArcGIS Engine提供的命令和工具 Web应用程序中(VS2005+SP1)添加App_Code(转) 解决NHibernate 中与 SQL2005 关键字有冲突的问题 在C#中使用代理的方式触发事件(转) IT人士长期出差 系统分析员、系统架构师、项目经理的区别(转) 潮湿的天气,潮湿的心情 一个项目经理的个人体会 数据库视图定义及其相关操作 windows mobile实现商品销售的例子 全国计算机与软件技术资格(水平)考试的英文名称 庆祝自己通过系分考试,分发资料 Windows系列操作系统对进程间通信的支持――管道与邮路 VC++中 PostMessage和SendMessage的区别
VB 输入超出文件尾(错误62)(转)
ZhaoYG · 2009-08-10 · via 博客园 - ZhaoYG

原出处:
http://hi.baidu.com/gamevip/blog/item/8c19b7114caba47dcb80c4c3.html

早期的VB是采用单字节处理方式(通常也称为ANSI方式),也就说一个英文字母用一个字节表示,一个汉字算两个字节,当然这样就可能出现半个汉字的问题。从VB 4.0起,VB采用了一种新的处理方式,即内部采用Unicode方式,即不论英文字母还是汉字,一律用两个字节表示,但Unicode还不够普及,所以VB只是在其内部完全使用Unicode,而在外部仍转换为人们习惯的ANSI方式,但在字符串处理上与先前的版本有所不同。例如:在中文Windows或英文Windows外挂RichWin 97中,Len("电子&电脑")=5(这里的&号为半角字符),而在以前的版本或纯英文Windows中Len("电子&电脑")=9。除了Len、Left、Right等字符串函数受此影响外,Input函数也受此影响。Input函数的第一个参数是要读入的字符数,它采用的是和Len一样的计数方式,即一个英文字母算一个字符,而一个汉字(两个字节)算一个字符。这看起来是个好主意,你不会读入半个汉字,但实际上糟透了,因为VB的LOF函数和FileLen函数都返回的是字节数,VB中没有一个能区分汉字和英文字母的LOF函数或FileLen函数!如果你测试文件d:\test1.txt全部是英文,那么你的这段程序可以正确运行,尽管你没有寄来测试文件,但我可以和你打赌,这个文件中有中文。如果你的文件中有100个汉字,那么LOF函数和FileLen函数返回文件长度200个字符,执行Input(200, filenum1),VB读到第100个汉字时就把文件读完了,所以提示错误:"输出超出文件尾"。可能会有人想,把LOF函数和FileLen函数返回文件长度除以2不就行了。是的,如果你的文件中只包括全角字符,那么这么改就对了,但我们平时接触的很多文件都是全角半角混杂的。VB提供了InputB函数,它可以按字节数读入文件,但实际上这个函数有错误,如果你用它读入的文件,那么你得到的可能是象"??????"这样的字符串。我想很多用户都见过这种奇怪的情况。Line Input语句就没有这个问题,因为它不计数,只看文件中是否有回车和换行,但Line Input语句比Input语句慢得多。怎么解决这个问题呢,我有一个办法不见得好,但可以应急。把Open打开文件的方式由Input改为Binary方式,即:

部分代码:

Open "C:\temp.txt" For Binary As #1
s = StrConv(InputB(LOF(1), #1), vbUnicode)
Close #1