软件注册站
热情软件屋

 
把文件读完后再写入另一个文件,为什么就会出错
编号: QA004133    
建立日期: 2001年4月23日 最后修改日期: 2001年4月23日
所属类别: Visual Basic - 磁盘、文件和目录
   
    我用VB5编了一个读取文件的程序,用二进制方式读取,可是当我把文件读完后再写入另一个文件,为什么就会出错(出错表现在,如果是EXE文件则说此文件不是有效的Win32程序:如果是图象文件则看见什么了没有,本来文件是有内容的),请问是怎么一回事
    程序如下:
    情况一(正常):
     Dim a() As Byte
    Open "c:\windows\desktop\flash.exe" For Binary As #2
    Open "d:\flash.exe" For Binary As #1
    Dim i As Long
    i = 0
    Do While Not EOF(1)
    i = i + 1
    ReDim a(1 To i)
    Get #1, , a(i)
    loop
    Close 1
    Close 2
    

    
    情况二(以上错误)
    Dim a() As Byte
    Open "c:\windows\desktop\flash.exe" For Binary As #2
    Open "d:\flash.exe" For Binary As #1
    Dim i As Long
    i = 0
    Do While Not EOF(1)
    i = i + 1
    ReDim a(1 To i)
    Get #1, , a(i)
    Loop
    For s = 1 To i
    Put #2, , a(s)
    Next
    Close 1
    Close 2
    
(zttjhm)
   
    问题出在你的ReDim语句上,每次你用ReDim改变数组大小时,以前读进来的数都会被仍掉,所以写的时候除了最后一个字节都不对。要保留以前读的数,应该改为:
    ReDim Preserve a(1 To i)
    

    实际上,你可以使用FileLen得到文件长度,这样程序可以简化:
    Dim a() As Byte
    Open "c:\windows\desktop\flash.exe" For Binary As #2
    Open "d:\flash.exe" For Binary As #1
    Dim i As Long
    i = 0
    ReDim a(1 To FileLen("c:\windows\desktop\flash.exe"))
    Do While Not EOF(1)
    i = i + 1
    Get #1, , a(i)
    Loop
    For s = 1 To i
    Put #2, , a(s)
    Next
    Close 1
    Close 2
    

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 磁盘、文件和目录, disk, file, fat, directory, folder

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

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