用CopyFile是不可能的,只能自定义复制函数了。最简单的方法就是用读写二进制文件的方法了,但这样复制文件的速度很慢。(如果从软盘复制或复制到软盘就不会觉得慢了。)下面是我以前写的一个复制文件到软盘的函数,你看看,不知对你有没有用。
pBar是进度条控件。
pBar的Max属性我是在复制文件前用FileLen函数获得且已经将Value属性设为0。
Declare Function GetDiskFreeSpace Lib "kernel32" Alias _
"GetDiskFreeSpaceA" (ByVal lpRootPathName As String, _
lpSectorsPerCluster As Long, lpBytesPerSector As Long, _
lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long'将文件复制到A盘的过程
Public Function SafeCopyToA(Source As String, Destination As String) As Boolean
Dim FreeSpace As Long, i As Long
Dim a As Long, b As Long, c As Long, d As Long5:
'获取A盘的剩余空间
i = GetDiskFreeSpace("a:", a, b, c, d)
FreeSpace = a * b * cIf FreeSpace = 0 Then
GoTo 20
End IfIf FileLen(Source) > FreeSpace Then
MsgBox "A盘的剩余空间不够,请先删除无用的信息再试!", vbCritical
frmDiskA.Show 1  '如果剩余空间不够,就弹出文件删除对话框
   If fDel = False Then  '如果未删除过文件就退出函数,返回False
   SafeCopyToA = False
   Exit Function
   Else                '否则重试
   fDel = False
   GoTo 5
   End If
Elsei = QbCopy(Source, Destination)
   If i = 0 Then
   GoTo 10  '如果复制过程中出错
   End If
SafeCopyToA = True
End IfExit Function10:
MsgBox "无法读出或写入软盘,可能软盘有写保护,或软盘已经损坏!", vbCritical
SafeCopyToA = False
Exit Function20:
MsgBox "软驱中没有软盘,请将软盘插入后再试!", vbCritical
SafeCopyToA = False
End FunctionPublic Function QbCopy(Source As String, Destination As String) As Integer
Dim FileNum(1) As Integer, Char As Byte
On Error GoTo 10
FileNum(0) = FreeFile
Open Source For Binary Access Read As #FileNum(0)
FileNum(1) = FreeFile
Open Destination For Binary Access Write As #FileNum(1)Do Until EOF(FileNum(0))
Get #FileNum(0), , Char
Put #FileNum(1), , Char
pBar.Value = pBar.Value + 1
LoopClose FileNum(0)
Close FileNum(1)QbCopy = 1
Exit Function10:
QbCopy = 0
End Function其实这不是真正的复制文件,这样复制出的文件的创建日期和最后修改日期等都会改变。如果不一定要用自己的进度条,你可以用API:SHFileOperation