热情软件屋

 

采用文本方式还是采用二进制方式


编号: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语句先删除原文件。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio