FILECOPY COM PROGRESSBAR???

JOERBETH 08/12/2006 15:34:04
#188866
Pessoal, boa tarde!!

Quero saber, se tem como definir o percentual de uma operação de copia de algum arquivo, através do FileCopy???, para ser mostrando em um controle ProgressBar1 por exemplo?

Falow

Joerbeth
USUARIO.EXCLUIDOS 08/12/2006 15:39:00
#188867
Resposta escolhida
Cara, não testei, mas dê uma olhada: COPIAR ARQUIVOS E EXIBIR PROGRESSO
JOERBETH 08/12/2006 15:48:00
#188871
Que merda complicada, más estou vendo
USUARIO.EXCLUIDOS 08/12/2006 15:55:09
#188875
Tá errada a função lá, mas consegui resolver:

Coloque essa função num módulo ou no form:
Public Function CopiaArquivo(src As String, dst As String, Optional ByVal objProgressBar As Control) As Single
Static Buf$
Dim BTest!, FSize!
Dim Chunk%, F1%, F2%

Const BUFSIZE = 1024

If Not objProgressBar Is Nothing Then
objProgressBar.Max = 100
End If
If Dir(src) = "" Then MsgBox "Arquivo não encontrado!": Exit Function
If Len(Dir(dst)) Then
If MsgBox(UCase(dst) & Chr(13) & Chr(10) & "O Arquivo já existe!" & vbCrLf & "Sobrepor?", 4) <> 6 Then Exit Function
Kill dst
End If

DoEvents

On Error GoTo FileCopyError
F1 = FreeFile
Open src For Binary As F1
F2 = FreeFile
Open dst For Binary As F2

FSize = LOF(F1)
BTest = FSize - LOF(F2)
Do
If BTest < BUFSIZE Then
Chunk = BTest
Else
Chunk = BUFSIZE
End If
Buf = String(Chunk, " ")
Get F1, , Buf
Put F2, , Buf
BTest = FSize - LOF(F2)
' __Call percent display here__
If Not objProgressBar Is Nothing Then
objProgressBar.Value = 100 - Int(100 * BTest / FSize)
End If
Loop Until BTest = 0
Close F1
Close F2
CopiaArquivo = FSize
Exit Function

FileCopyError:
MsgBox "Erro ao copiar!", vbExclamation
Close F1
Close F2
Exit Function
End Function


Para usar, é só chamar a função, passar a origem, o destino e a barra de progresso (não obrigatória):
If CopiaArquivo("C:\Origem\Arquio.ext", "C:\Destino\Arquio.ext", ProgressBar1) Then
MsgBox "Cópia realizada com sucesso!", vbInformation
Else
MsgBox "O arquivo não pode ser copiado!", vbExclamation
End If

JOERBETH 08/12/2006 16:27:31
#188887
Seguinte, funcionou assim, copiando da unidade C para unidade C ou D, beleza, o progressBar corre diretitinho, más quando o destino é a unidade A, corre somente 3 pontos na progress e para, só preenche o resto quando mostra a mensagem da "Cópia realizada com sucesso!", outra coisa, o ProgressBar1 na hora de chamar a função, se não especificar, como vamos saber o progresso da operação???.

Falow
JOERBETH 08/12/2006 16:39:16
#188888
Kra, agora o progressbar correu normal, más me diz, tem como colocar a numeração em um label sei lá correndo de 0...até 100%??

Falow

Joerbeth
USUARIO.EXCLUIDOS 08/12/2006 16:56:27
#188893
Citação:

ProgressBar1 na hora de chamar a função, se não especificar, como vamos saber o progresso da operação???



Só não especificaria se não precisasse saber o progresso mesmo...

Citação:

JOERBETH escreveu:
Kra, agora o progressbar correu normal, más me diz, tem como colocar a numeração em um label sei lá correndo de 0...até 100%??

Falow

Joerbeth



Vc pode usar o XPProgressBar, que já faz isso sozinha...flw
SILVIO.GARCIA 09/12/2006 13:15:10
#188999
Muito bom Matioli!
Tópico encerrado , respostas não são mais permitidas