Prograssebar progresse a fur et à mesure qu'un fichier se copie

Résolu
Signaler
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010
-
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
-
Salut!

-Comment faire pour que une prograssebar progresse a fur et à mesure qu'un fichier se copie?

-Merci

14 réponses

Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Il y a une source de Darksidious

http://www.vbfrance.com/codes/DEFILLEMENT-COPIE-DOSSIER_18132.aspx

Elle répond à la question posée initialement.

jmfmarques: je n'ai pas encore pris le temps de regarder FileCopyEx.   Vu que ma fonction est codée dans une DLL, je l'appelle via une seule ligne de code.   La "lourdeur" de la fonction est donc "oubliée" dans ma programmation quotidienne

Christophe
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

comment savoir ta méthode de copie ?
T'as un bout de code ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonsoir,

Question : as-tu trouvé le truc qui te permette de connaître l'état d'avancement d'une copie de fichier ? (moi non, jusqu'à présent)
Selon ta réponse :
- si oui : je t'en supplie : publie ce truc..
- si non : alors il va falloir que tu fasses comme tout le monde : que tu "estimes" le temps de chargement en fonction de la taille du fichier, de l'horloge de ta machine, de l'encombrement du processeur, etc... etc...
Cette chose n'est pas trop difficile lorsque que la copie concerne plusieurs fichiers (on peut "ajuster" l'estimation de la durée en fonction des constatations faites lors de la copie des 1ers éléments). Il en va différemment lorsqu'un seul fichier est à copier (pas de "repères d'ajustement" possibles alors, bien évudemment...)
Une fois cette durée "estimée", le reste est un jeu d'enfant : faire avancer la barre en proportion du temps écoulé.
Messages postés
218
Date d'inscription
jeudi 13 juillet 2006
Statut
Membre
Dernière intervention
11 juillet 2010

Je utilise Filecopy

-Vous avez un exemple
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut Jacques,

je me demandais, c'est pas possible (certainement approximativement) de lire en binaire (avec Open .. For) et d'écrire en même temps ?
(on compte le nombre de ligne, et on clacul un % avec ces nombres) ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour Mprtalino,

Ce doit être possible, oui, mais à quel prix en temps d'exécution ?
Mme Windows l'évite, apparemment (ses barres de progressions restent on ne peut plus approxumatives, comme tu peux le constater, quand ont fait une copie depuis un endroit vers l'autre de longs fichiers, dans l'explorateur)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Oui, c'est vrai
En plus, si tu copies, et d'un coup tu fais autre chose, vu que le processeur est demandé, il augmente le temps de copie.

Pas évident, quoi !

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, ~Provençal, le Gaulois~
  
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
CQFD

Conclusion : l'utilisation d'un affichage de progression de copie peut être envisagé lorsque plusieurs fichiers sont copiés (la durée constatée de copie des premiers permettant d'estimer la durée totale).
Il en va différemment s'il ne s'agit que d'un seul fichier (on ne peut alors valablement se "raccricher" à aucune "expérience").
Messages postés
1883
Date d'inscription
samedi 1 avril 2006
Statut
Membre
Dernière intervention
20 novembre 2007
2
Salut tout le monde,
une idée fofolle , jamais essayé ...théorique quoi


>Un label (couleur BackColor au choix)
>Un Timer


Label.Width=0


Sub Copier_Un_Fichier
    Timer.Enabled=True
    FileCopy ....
    Label.Width=<valeur maximal>
    Timer.Enabled=False
    MsgBox "Terminé"
End Sub


Sub Tumer()
 Label.Width=Label.Width+60
End Sub


Question qui se pose : Est ce que FileCopy monopolisera le système
pour empêcher l' instruction qui suit de s' éxécuter ?


<hr />

® l l i n g , l' agité du bocal : 
   Etre une heure, une heure seulement..Rien qu' une heure,
   Vert, vert, vert et beau à la foooooooooooooooooooooooois. 
<hr />
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Si cela t'est possible; pourquoi ne pas faire appel à la fonction API de Windows.

Private Type SHFILEOPSTRUCT
   hwnd As Long
   wFunc As Long
   pFrom As String
   pTo As String
   fFlags As Long
   fAnyOperationsAborted As Long
   hNameMappings As Long
   lpszProgressTitle As String
End Type

Private Declare Function SHFileOperation Lib "Shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Function ZCopyFile(ByVal sSourceFileName As String, ByVal sTargetFileName As String, _
   Optional bAskConfirmation As Boolean = True, Optional ByVal hwnd As Long = 0) As Boolean
  
Dim shFile As SHFILEOPSTRUCT
Dim wResult As Long
Dim wFlags As Long

   If Not bAskConfirmation Then wFlags = FOF_ALLOWUNDO Or FOF_NOCONFIRMATION Else wFlags = FOF_ALLOWUNDO
  
   With shFile
      .hwnd = hwnd
      .wFunc = FO_COPY
      .pFrom = sSourceFileName & vbNullChar & vbNullChar
      .pTo = sTargetFileName & vbNullChar & vbNullChar
      .fFlags = wFlags
   End With
  
   wResult = SHFileOperation(shFile)
   ZCopyFile = (wResult = 0) And (shFile.fAnyOperationsAborted = 0)

End Function, ----
(Coloration syntaxique automatique par Kenji)

Christophe
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

Si c'est pour se contenter de çà, autant alors se servir de la fonction FileCopyEx de la librairie Kernel32 de l'Api de Windows (elle sera aussi peu précise mais aura le mérite de "bouffer" moins de place !!)

Si on veut variment de si peu, je peux faire, y compris avec une "progressebar" affichant en son centre le "pourcentage" d'avancement !

Ya qu'à dire...
Messages postés
168
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
28 juillet 2009
1
Bonjour jmfmarques, pas sûr de te suivre sur ce coup.   

C'est certain que la méthode que j'ai mentionné occupe plusieurs lignes de code mais, à l'utilisation, elle me plaît assez bien.   J'aurais aimé être capable de changer le caption de la fenêtre mais bon, ce qui est avantageux, ce que l'utilisateur connaît déjà le look&feel de cette fenêtre, la possibilité d'écraser un fichier avec ou sans confirmation, la possibilité d'annuler la copie au besoin, ...

Christophe
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour cavo789

Oui ?
Et alors ? T'as jeté un couip d'oeil à ce que fait la fonction FileCopyEx ?
La même chose en direct !
Mais les résultats ne sont pas vraiment exacts, ni pour l'une (la tienne), ni pour l'autre (la mienne)
Je viens par ailleurs de tomber (en cherchant) sur cette source :
http://files.codes-sources.com/fichier.aspx?id=732&f=CopyFileProgress.frm

Elle est encore plus aléatoire en ce sens qu'elle se base sur l'évolution de l'occupation du lecteur ....
(vaut mieux ne pas penser à ce qui se passerait si d'autres opérations, lancées parallèlement...faisaient dans le même temps évoluer elles aussi cette occupation !!!)
Bref...
Je vais donc préparer cet après midi une source (que je n'aime pas, mais qui sera "moins pire" )

A bientôt, donc.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Ah...
Je vois que DARKSIDIOUS lui aussi utilise FileCopyEx... (je suis d'accord avec lui car c'est la méthode la "moins pire")...