2012-02-16 21:02
【转】如何复制一个正在使用的文件?(VB6.0)
刚刚在群里与别人聊到,使用VB的FileCopy函数无法复制正在使用中的文件.
他是想将数据库备份.
网上有不少的办法,有使用API的,有使用FSO的等.
我想,无法复制使用中的文件,可能是使用了读写模式打开源文件的原因吧.
于是就试着写了以下函数:
Public Function FileCopyEx(ByVal SouFileName As String, ByVal DestFileName As String)
'复制文件,可以复制正在使用的文件.
'SouFileName - 源文件
'DestFileName - 目标文件
'By 马大哈
'2007-05-05
Dim tmpArr() As Byte
Open SouFileName For Binary Access Read As #1
ReDim tmpArr(LOF(1))
Get 1, , tmpArr
Close #1
Open DestFileName For Binary As #2
Put 2, , tmpArr
Close #2
ReDim tmpArr(0) '释放内存
End Function
FileCopyEx与FileCopy是一样的用法,不过它可以复制正在使用中的文件.
代码非常简单,就不说明了.
但这种原理的代码是有问题的,就是在复制很大的文件时,程序会挂起.(文件小感觉不到)
最理想的是这样:
一,分段读入/写入,并返回进度;
二,放在一个线程里.
但是,VB6里多线程真的不好搞(至少我的本事还达不到让它稳定的程度.....)
他是想将数据库备份.
网上有不少的办法,有使用API的,有使用FSO的等.
我想,无法复制使用中的文件,可能是使用了读写模式打开源文件的原因吧.
于是就试着写了以下函数:
Public Function FileCopyEx(ByVal SouFileName As String, ByVal DestFileName As String)
'复制文件,可以复制正在使用的文件.
'SouFileName - 源文件
'DestFileName - 目标文件
'By 马大哈
'2007-05-05
Dim tmpArr() As Byte
Open SouFileName For Binary Access Read As #1
ReDim tmpArr(LOF(1))
Get 1, , tmpArr
Close #1
Open DestFileName For Binary As #2
Put 2, , tmpArr
Close #2
ReDim tmpArr(0) '释放内存
End Function
FileCopyEx与FileCopy是一样的用法,不过它可以复制正在使用中的文件.
代码非常简单,就不说明了.
但这种原理的代码是有问题的,就是在复制很大的文件时,程序会挂起.(文件小感觉不到)
最理想的是这样:
一,分段读入/写入,并返回进度;
二,放在一个线程里.
但是,VB6里多线程真的不好搞(至少我的本事还达不到让它稳定的程度.....)