Page 1 sur 1
[..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 11:33
par quirionais
Bonjour tout le monde !
Je suis actuellement en fin de stage en entreprise et mon dernier objectif est de coder un petit soft de sauvegarde pour un utilisateur X.
Je vous passe les détails car ça n'a aucune importance.
Tout fonctionne correctement mais j'aurais aimé voir apparaître une barre de progression pendant la copie ( CD => Serveur ) qui est assez longue.
Vous allez me dire que le sujet a déjà été présenté (ce qui est vrai) mais je n'arrive pas à intégrer ça dans ma fonction.
Voila ma fonction (simplifié pour l'exemple) :
Code : Tout sélectionner
Func _copy()
If FileExists($dirFolder) Then
MsgBox(0, "", "La sauvegarde a déjà été effectué !")
Return 1
Else
_RunDOS ("xcopy.exe " & $source & " " & $destination & " /e /c /h /r /k /y /d /i")
_RunDOS ("xcopy.exe " & $source1 & " " & $destination1 & " /e /c /h /r /k /y /d /i")
_RunDOS ("xcopy.exe " & $source2 & " " & $destination2 & " /e /c /h /r /k /y /d /i")
EndIf
Return 1
EndFunc
Merci d'avance
Re: [..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 11:45
par zeshrek
Bon bin déjà, ca sera pas possible en l'état.
Tu utilises xcopy qui est une fonction DOS. Pourquoi ne pas utiliser une fonction de copie d'autoit comme FileCopy () ou DirCopy() ?
Et là ca te permettrait assez facilement de faire ta barre de progression. Si tes sources sont des répertoires, un petit coup de _FileListToArray pour avoir la liste des fichiers a copier, et donc entre chaque copie tu fais progresser ta barre
Re: [..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 11:56
par scorp84
Bonjour quirionais,
Voici un exemple de copie avec barre de progression :
http://www.autoitscript.com/forum/topic ... ntry600777
En espérant voir pu t'aider.
Amicalement.
BM
Re: [..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 14:02
par quirionais
Merci mais cet exemple ne copie pas un répertoire entier et je ne sais pas comment l'adapter dans ce but.
Je sais, je suis mauvais mais je suis technicien système et réseau en théorie :p
J'ai rectifier mon code comme ça pour le moment (avec DirCopy):
Code : Tout sélectionner
Func _copy()
If FileExists($dirFolder) Then
MsgBox(0, "", "La sauvegarde a déjà été effectué !")
Return 1
Else
DirCopy ($CDFolder, $dirFolder, 1)
DirCopy ($sourceRSI, $s_dataRSI, 1)
DirCopy ($sourceMSA, $s_dataMSA , 1)
EndIf
Return 1
EndFunc
Re: [..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 15:32
par zeshrek
Si tu ne copies pas un répertoire entier, pourquoi tu utilises dircopy ? A ce moment là, c'est filecopy qu'il faut utiliser...
Re: [..] Copie dossier + Barre de progression
Posté : ven. 10 juin 2011 19:39
par mikell
Ben il va bien le script que t'indique scorp84 (tu peux même le simplifier)
Si tu copies des répertoires, tu utilises DirCopy() et DirGetSize()
Avec DirGetSize() tu enregistres la taille du répertoire copié, la taille du répertoire à copier, tu divises et tu envoies le rapport à ta progressbar
à utiliser dans une boucle
véri izi

Re: [..] Copie dossier + Barre de progression
Posté : mer. 15 juin 2011 17:45
par TopXm
Bonjour,
J'ai fait un bout de code pour sauvegarder le dossier Mes Documents d'un membre de la famille, si ça peut aider.
NB : Ne gère pas les sous-dossiers
► Afficher le texteBout de code
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <File.au3>
#Include <Array.au3>
;Recup du chemin de Mes Documents
$FldDef = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal")
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Folder Save", 253, 101, 192, 124)
Global $Label1 = GUICtrlCreateLabel("Source", 8, 11, 38, 17)
Global $FolderIn = GUICtrlCreateInput($FldDef, 56, 8, 193, 21)
Global $Label2 = GUICtrlCreateLabel("Cible", 8, 38, 27, 17)
Global $FolderOut = GUICtrlCreateInput("D:\SaveDocuments", 56, 35, 193, 21)
Global $BtCopy = GUICtrlCreateButton("Copy", 176, 64, 73, 17, $WS_GROUP)
Global $PgBar = GUICtrlCreateProgress(0, 82, 249, 17)
GUICtrlSetState($PgBar, $GUI_HIDE)
Global $FileCopy = GUICtrlCreateLabel("", 0, 64, 341, 20)
GUICtrlSetState($FileCopy, $GUI_HIDE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $Nbfiles = 0
Global $Stop = False
HotKeySet("{ESC}", "BruteStop")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $BtCopy
If SaveFolder(GUICtrlRead($FolderIn), GUICtrlRead($FolderOut)) Then
msgbox(0, "Folder Copy ...", $Nbfiles & " Fichier(s) copié(s) ")
EndIf
EndSwitch
WEnd
Func SaveFolder($FldIn, $FldOut)
If Not FileExists($FldIn) Then
MsgBox(0, "Folder Copy ...", "Dossier " & $FldIn & " inexistant ... pffff ..... ")
Return False
EndIf
If Not FileExists($FldOut) Then DirCreate($FldOut)
GUICtrlSetState($PgBar, $GUI_SHOW)
GUICtrlSetState($FileCopy, $GUI_SHOW)
GUICtrlSetData($PgBar, 0)
$Files = _FileListToArray($FldIn, "*.*")
For $I = 1 to $Files[0]
If $Stop Then ExitLoop
GUICtrlSetData($FileCopy, "Copie de " & $Files[$I])
FileCopy($Files[$I], $FldOut & "\" & $Files[$I], 1)
$Nbfiles+=1
GuiCtrlSetData($PgBar, ($I * 100) / $Files[0])
Sleep(100)
Next
GUICtrlSetState($PgBar, $GUI_HIDE)
GUICtrlSetState($FileCopy, $GUI_HIDE)
Return True
EndFunc
Func BruteStop()
If MsgBox(4, "Folder Copy ..." , "Confirmer l'arret de la copie ?") = 6 Then $Stop = True
EndFunc