采用文本方式还是采用二进制方式
编号:QA001182
建立日期: 1999年6月15日 最后修改日期:1999年6月15日
所属类别:
李刚:
vb3.0
win98
我是VB的一个初学者,提出的问题也比较初级。说来也惭愧大家都已经VB6了,我手头只有VB3,并没有任何学习材料。因我现在落后的非洲大陆的西部——几内亚,希望解答的尽量详细。
现需要完成这样一个工作,完整地读一个磁盘文件(任何格式、任何长度),处理后再换名存入磁盘,应采用什么读写方式。
在试验中发现:读的过程,若用for input打开,用input读时,遇到&h1a(EOF)时就不读了,似不能处理任意格式的文件;如果用for binary打开,要事先定义字符串长度,不知如何处理任意长度的文件。
写的过程,若用for output打开,然后用print #写时,每写入一段,在其之后多了两个字符,回车和换行符(&h0d,&h0a),这点不符合我的要求,我希望一字不添一字不减;如果用for binary打开,然后用put函数写,在生成的文件中,最前头多了4个字节,前两个字节不知是什么内容,后两个好象是文件长度。这也不符合我的要求。另外用这种方法写的文件,如果磁盘上有同名文件,写入的文件长度小于原磁盘中文件时,保留原文件长度,而不是我写的新文件的实际长度。
我应采用什么语句、函数进行编程才能达到本文开始提出的要求。在VB中有没有类似DOS中的系统调用ah=3fh int 21h(读文件)和 ah=40h int 21h(写文件)的功能。望在百忙之中给以赐教,不胜感谢。
回答:
对于读文件的问题,由于你要读EOF,所以必须使用For Binary方式。读时采用这样的方法:
Dim s As String
Open "C:\test" For Binary As 1
s = Space(100)
Get #1, , s
你可以随意设置Space()的参数,以决定读入多少个字节。不过VB3限制字符串不能超过64K,所以如果文件大小超过64K,你需要分几次读入。
对于写文件,如果你不希望print #加入会车换行符,可以在Print #语句后面加上分号,如:
Print #1, s;
你也可以使用Put语句:
Dim s As String
s = "ABCDEFG"
Open "c:\test" For Binary As #1
Put #1, , s
Close #1
这样写的文件不会出现你说的多4个字节的问题。至于同名文件的问题,你可以在写文件前,使用Kill语句先删除原文件。
此问题由李海回答。
| |
|
|
| |
|
|