使用VB 6
在我的项目中,当我将文件从一个文件夹复制到另一个文件夹时,我想要显示进度条,如复制......。,复制文件后,进度条显示100%已完成。
代码。
'文件复制
Private Sub Copy_Click()
Timer1.Enabled = True
Dim abc As Integer
Dim line As String
abc = FreeFile
Open App.Path & "\DatabasePath.TXT" For Input As #abc
Input #abc, line
databasetext = line
Dim fs As New FileSystemObject, f As File
Set f = fs.GetFile(databasetext)
f.Copy App.Path & "\"
Set fs = Nothing
Close #abc
End Sub
Private Sub Timer1_Timer()
ProgressBar1.Min = 0
ProgressBar1.Max = 100
ProgressBar1.Value = ProgressBar1.Value + 1
If ProgressBar1.Value = ProgressBar1.Max Then
Timer1.Enabled = False
End If
End Sub
以上代码正常工作,但是当我单击复制按钮时,一旦将文件复制到另一个文件夹,Progressbar1就不会显示。然后只有progressbar1说明。
两者都不会同时工作。
此外,复制文件后,进度条应显示100%。现在它没有正确显示,仍然文件正在复制,进度条显示100%
任何人都可以帮助解决问题。
需要VB 6代码帮助。
答案 0 :(得分:4)
如果标准复制功能阻止定时器触发,那么你可以做的最好的事情是编写你自己的副本,一次读取几千字节的源文件并将其写入目标文件。
在每次读写操作之间,您需要更新进度条并(可能)调用DoEvents以确保重绘。
此外,您的计时器代码没有任何意义。如果火灾没有参考实际取得的进展,它每次都会随意增加进度。最好将进度条传递给复制功能,以便随时更新。
这样的事情可以做到:
Private Sub Copy_Click()
Dim abc As Integer
Dim line As String
abc = FreeFile
Open App.Path & "\DatabasePath.TXT" For Input As #abc
Input #abc, line
copyFile line, App.Path & "\" & line, ProgressBar1
Close #abc
End Sub
Sub copyFile(inFile As String, outFile As String, ByRef pg As ProgressBar)
Close
Const chunkSize = 1024
Dim b() As Byte
fhIn = FreeFile
Open inFile For Binary Access Read As #fhIn
fhOut = FreeFile
Open outFile For Binary Access Write As #fhOut
toCopy = LOF(fhIn) 'gets the size of the file
fileSize = toCopy
pb.Min = 0
pb.Max = toCopy
While toCopy > 0
If toCopy > chunkSize Then
ReDim b(1 To chunkSize)
toCopy = toCopy - chunkSize
Else
ReDim b(1 To toCopy)
toCopy = 0
End If
Get #fhIn, , b
Put #fhOut, , b
pg.Value = fileSize - toCopy
DoEvents
Wend
Close #fhIn
Close #fhOut
End Sub
答案 1 :(得分:0)
要使进度条起作用,必须使用定期循环内联更新,或者在单独的线程中运行。
答案 2 :(得分:0)
旧学校VB6中的副本是一个阻止命令。因此,即使DoEvents也会给出相同的结果(文件将被复制,然后进度条将显示)。如果您要通过慢速介质复制大文件并且需要能够显示进度,那么您应该创建目标文件并在循环中以块的形式移动字节,在该循环中您可以更新进度条。遗憾的是,对于OP中给出的示例,由于每个操作都是同步的,因此您无法获得所需的内容。
编辑:被我上面的那个人殴打:)