Attendre la fin de Filecopy

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Filou07
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 09 sept. 2013 09:01
Status : Hors ligne

Attendre la fin de Filecopy

#1

Message par Filou07 »

Bonjour,

Dans mon script, j'utilise la commande Filecopy pour copier plusieurs fichiers d'un dossier vers un autre (mise à jour par écrasement) puis je fais exécuter l'un des fichiers copiés (une base de données Access en l’occurrence). Mon souci c'est que le l'exécution de ce fichier se fait alors que la copie n'a pas fini et du coup erreur.

Comment puis-je faire attendre mon script que la copie intégrale soit terminée ?

Merci pour votre aide
Avatar du membre
mimione
Niveau 4
Niveau 4
Messages : 91
Enregistré le : mer. 30 avr. 2008 18:11
Localisation : Bretagne
Status : Hors ligne

Re: Attendre la fin de Filecopy

#2

Message par mimione »

Bonjour
Je vais probablement proposer une ânerie (ça ne serait pas la première !): Est-ce qu'un "FileFlush" ne permettrait pas de résoudre le problème ?? -le hic , c'est qu'il faut un "filehandle" qu'on ne demande pas pour faire le "FileCopy"....
Pas taper !
Bonne journée.
Je ne suis pas toujours de mon avis....
--------------------------------------------
Des malheurs évités le bonheur se compose.
Filou07
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 09 sept. 2013 09:01
Status : Hors ligne

Re: Attendre la fin de Filecopy

#3

Message par Filou07 »

Fileflush est réservé à l'édition de fichier, mais pas à la copie.

Comme je suis un gentil garçon je tape pas :D
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Attendre la fin de Filecopy

#4

Message par mikell »

En principe FileCopy ne se termine que quand la copie est finie, donc le problème doit venir du fait que la copie concerne plusieurs fichiers
Pas testé, mais tu pourrais essayer une boucle d'attente qui compare les tailles de source et destination (FileGetSize) du dernier fichier copié
Ou alors un mélange savant de FileExists et de _WinAPI_FileInUse
Ou peut-être tout simplement copier la bdd en dernier Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Attendre la fin de Filecopy

#5

Message par orax »

mimione a écrit : lun. 24 juil. 2017 11:56Est-ce qu'un "FileFlush" ne permettrait pas de résoudre le problème ?? -le hic , c'est qu'il faut un "filehandle" qu'on ne demande pas pour faire le "FileCopy"....
J'avais aussi pensé à faire un "flush". :wink: Mais je ne sais pas si c'est la solution au problème.
_WinAPI_FlushFileBuffers me semble plus adapté que FileFlush : How to flush a storage volume's file cache, lock and dismount it, and eject the media - CodeProject
Ou Sync de Sysinternals : https://technet.microsoft.com/en-us/sys ... 2147217396
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Filou07
Niveau 1
Niveau 1
Messages : 6
Enregistré le : lun. 09 sept. 2013 09:01
Status : Hors ligne

Re: Attendre la fin de Filecopy  

#6

Message par Filou07 »

Bonjour,
Finalement, j'ai pris l'option de mettre en array la liste des fichiers à copier, de copier chaque fichier et de faire une boucle tant que les dates et tailles ne concordent pas :
Local $aFileList = _FileListToArray($CheminMAJ, "*")
for $aFile in $aFileList
   FileCopy($CheminMAJ & "\" & $aFile,@ScriptDir & "\", $FC_OVERWRITE)
   While filegetsize($CheminMAJ & "\" & $aFile)& " - " & filegettime($CheminMAJ & "\" & $aFile,0,1)<> filegetsize(@ScriptDir & "\" & $aFile)& " - " & filegettime(@ScriptDir & "\" & $aFile,0,1)
   WEnd
Next
nanucq
Niveau 1
Niveau 1
Messages : 4
Enregistré le : sam. 16 nov. 2013 09:54
Status : Hors ligne

Re: Attendre la fin de Filecopy

#7

Message par nanucq »

Et un ProcessWaitClose ne fonctionnerait pas ?

Code : Tout sélectionner

Local $iPID = FileCopy(.....)
ProcessWaitClose($iPID)
EDIT: Effectivement, c'est une bêtise :cry:
Modifié en dernier par nanucq le jeu. 27 juil. 2017 15:33, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Attendre la fin de Filecopy

#8

Message par mikell »

FileCopy (fichier d'aide)
Return Value : Success: 1 , Failure: 0.
:!:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre