vb 复制大文件

用VB复制一个比较大的文件900MB吧最好要有进度条的界面不会死的.用windows的API是可以但是我希望在主窗体中显示用线程CreateThread我也试了.不过生成... 用VB复制一个比较大的文件 900MB吧 最好要有进度条的 界面不会死的.
用windows 的API是可以但是我希望在主窗体中显示
用线程 CreateThread 我也试了. 不过生成EXE运行就会出错

哎!有点郁闷啊
展开
 我来答
forest93
2006-12-31 · TA获得超过337个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:0
展开全部
大文件拷贝可以采用逐字符复制的方法。
核心代码(更新于 2006年 12月 31 日):

Const BSize = 4096 '缓冲区的大小
Dim StopCopy As Boolean '复制中断时必须将其设定为 True
Sub Copy(sFrom As String, sTo As String)
On Error GoTo Err1
Dim FID As Integer '源文件的编号
Dim TID As Integer '目标文件的编号
Dim All As Long '源文件的大小
Dim Pos As Long '当前复制到的字节的位置
Dim tmp() As Byte '缓冲区

Dim pTime As Single '复制开始的时间
Dim pPast As Long '复制所用的时间(秒)

If sFrom = "" Or sTo = "" Then Err.Raise 53
If Dir(sFrom) = "" Then Err.Raise 53
If Dir(sTo) <> "" Then
If MsgBox(sTo & vbCrLf & "文件已存在,是否覆盖?", vbQuestion + vbYesNo) = vbNo Then
Exit Sub
Else
Kill sTo
End If
End If

FID = FreeFile
Open sFrom For Binary As #FID '打开源文件
TID = FreeFile
Open sTo For Binary As #TID '打开目标文件

All = LOF(FID) '得到源文件的大小
pTime = Timer '开始复制的时间
pPast = 1
StopCopy = False

Do '开始复制
Dim mPos As Long
Pos = LOF(TID) '得到目标文件的大小
pPast = CLng(Timer - pTime) '得到复制所用的时间
If pPast < 1 Then pPast = 1
mPos = IIf(Pos < 1, 1, Pos)
LBLS1.Caption = "" & vbCrLf & "已复制 " & Pos & "字节,共 " & All & "字节" & vbCrLf & _
"速度:" & Format(mPos / pPast, "#0") & "字节/秒" & vbCrLf & _
"已用时间:" & pPast & "秒 剩余时间:" & Format((All - mPos) / (mPos / pPast),"#0") & "秒"
'显示状态

If Pos >= All Then Exit Do '如果目标文件与原文件一样大(复制已完成,则退出循环)
If All - Pos < BSize Then ReDim tmp(All - Pos - 1) Else ReDim tmp(BSize) '创建缓冲区
Get #FID, , tmp
Put #TID, , tmp
'复制
DoEvents '使用 DoEvents 转让控制权,以便让操作系统处理其它的事件

If StopCopy = True Then Exit Do '复制被终止
Loop

MsgBox "复制完成!", vbInformation
GoTo CloseAll '关闭文件
Exit Sub
Err1:
MsgBox "ERROR:" & Err.Number & vbCrLf & Err.Description, 16
GoTo CloseAll
Exit Sub
CloseAll: '关闭已打开的文件
On Error Resume Next
Close #FID
Close #TID
End Sub

注:
1.这段代码有一个小小的漏洞。由于 Timer() 返回的是从午夜开始到现在经过的秒数,所以如果复制是从 23时 59分 开始,到 0 时 02 分结束,即跨越了一天,复制速度、复制时间的显示可能会有问题。但是对文件的复制没有影响。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式