Filecopy et progressbar ???

Signaler
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
-
Messages postés
8
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
1 mars 2004
-
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

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
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
Messages postés
1247
Date d'inscription
mardi 7 mai 2002
Statut
Membre
Dernière intervention
18 février 2019
4
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???
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
27
J'allais justement te répondre "Bah!! T'as qu'as faire du recursif !!!"
Je fait ca et je te l'envoie

Christophe R.
Messages postés
8
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
1 mars 2004

: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
Messages postés
8
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
1 mars 2004

:big)

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

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

Merci