Filecopy et progressbar ???

pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 - 20 août 2003 à 01:51
vmaxman Messages postés 8 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 1 mars 2004 - 29 févr. 2004 à 19:51
Slt, j ai un peu honte de demander ca, mais j arrive pas a faire un filecopy d'un fichier et afficher son avancement dans une progressbar!!!

J utilise la progressbar pour le telechargement de fichier avec inet, mais la j y arrive pas!!! ci joint un ex de code qui marche po!!!

pb.Min = 0
pb.Max = FileLen("d:\test.mp3")
FileCopy "d:\test.mp3", "c:\test1.mp3"

Do Until FileLen("c:\test1.mp3") = FileLen("d:\test.mp3")
pb.Value = FileLen("c:\test1.mp3")
DoEvents
Loop

?????

5 réponses

crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
20 août 2003 à 08:50
Normal puisque FileCopy ne te rend la main que lorsqu'il a fini la copie ... De toute facon meme si ce n'était pas le cas, ca n'irait pas car lorsque tu copies 1 fichier sur Windows, l'enveloppe du ficheir destination est d'abord créer avec la meme taille que le fichier source, et ensuite les datas sont copiées dedans.
Pour résoudre ton probleme il faut que tu utilises l'API CopyFileEx() qui fournit une procédure de CallBack ... Voila un exemple tirer de API-Guide :

'in a form (Form1)
Private Sub Form_Load()
    'KPD-Team 2001
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim Ret As Long
    'set the graphics mode to persistent
    Me.AutoRedraw = True
    'print some text
    Me.Print "Click the form to abort the filecopy"
    'show the form
    Me.Show
    'start copying
    Ret = CopyFileEx("c:\verybigfile.ext", "c:\copy.ext", AddressOf CopyProgressRoutine, ByVal 0&, bCancel, COPY_FILE_RESTARTABLE)
    'show some text
    Me.Print "Filecopy completed " + IIf(Ret = 0, "(ERROR/ABORTED)", "successfully")
End Sub
Private Sub Form_Click()
    'cancel filecopy
    bCancel = 1
End Sub
'in a module
Public Const PROGRESS_CANCEL = 1
Public Const PROGRESS_CONTINUE = 0
Public Const PROGRESS_QUIET = 3
Public Const PROGRESS_STOP = 2
Public Const COPY_FILE_FAIL_IF_EXISTS = &H1
Public Const COPY_FILE_RESTARTABLE = &H2
Public Declare Function CopyFileEx Lib "kernel32.dll" Alias "CopyFileExA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As Long, lpData As Any, ByRef pbCancel As Long, ByVal dwCopyFlags As Long) As Long
Public bCancel As Long
Public Function CopyProgressRoutine(ByVal TotalFileSize As Currency, ByVal TotalBytesTransferred As Currency, ByVal StreamSize As Currency, ByVal StreamBytesTransferred As Currency, ByVal dwStreamNumber As Long, ByVal dwCallbackReason As Long, ByVal hSourceFile As Long, ByVal hDestinationFile As Long, ByVal lpData As Long) As Long
    'adjust the caption
    Form1.Caption = CStr(Int((TotalBytesTransferred * 10000) / (TotalFileSize * 10000) * 100)) + "% complete..."
    'allow user input
    DoEvents
    'continue filecopy
    CopyProgressRoutine = PROGRESS_CONTINUE
End Function
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
20 août 2003 à 14:13
Ok ca marche nikel, j ai adapter le code de renvoie du % a ma progressbar et la superbe!!!

Mais au cas ou tu serai, je cherche aussi le moyen de copier des sous dossiers et fichier d'un repertoire. cette api pour les fichiers nikel, mais pour les sous.... ca marche pas!!

Aurait tu une idée, Une api, ou une fonction recursive qui renvoie tous les sous dossiers et sous fichiers???

Ps: j'éssaie un vain de mettre au point une fonction recursive mais j'y arrive po lol, si tu peu m'aider???
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
21 août 2003 à 00:46
J'allais justement te répondre "Bah!! T'as qu'as faire du recursif !!!"
Je fait ca et je te l'envoie

Christophe R.
0
vmaxman Messages postés 8 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 1 mars 2004
26 févr. 2004 à 19:28
:big)
J'ai aussi essayé ce code.
Il marche nickel sur W2000, mais je n'arrive pas à le faire marcher sur 98. C'est la même version de VB pourtant!
Y aurait-il une manip pour prendre en compte quelquechose?
Quand je dis que çà ne marche pas : le copyfileex rend la main immédiatement!
Merci pour votre aide, par avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vmaxman Messages postés 8 Date d'inscription jeudi 19 juin 2003 Statut Membre Dernière intervention 1 mars 2004
29 févr. 2004 à 19:51
:big)

Allo!!!
Y'a qqn dans ce forum?

Personne ne sait pourquoi le copyFileEx ne marche pas sous W98 SE?????

Merci
0
Rejoignez-nous