Detecter l'apparition d'un fichier

nablimohavb Messages postés 18 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 27 février 2009 - 26 févr. 2009 à 14:35
nablimohavb Messages postés 18 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 27 février 2009 - 27 févr. 2009 à 10:25
Bonjours

Je travaille sur une application qui fait l'envoie d'un fichier de données vert une machine
l'envoie se fait à traver un patch "Patch.exe", le patch renvoi un fichier resultat d'envoi,dedans indiquant  si le transfert et réalisée avec succé ou non.
pour lire le resultat, j'utilise un timer qui pointe chaque 10s vers lechemin du fichier et lit le resultat d'envoi
le probleme et que des fois le timer ouvre le fichier sans rein trouver,car à la fin de l'envoi le patch genere le fichier ensuit il ecrit le resultat

Y a t'il une autre solution pour bien lire le fichier resultat au bon moment.

merci.

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 févr. 2009 à 14:58
tu cherches en gros a lire le fichier, si les modifications le concernant sont terminées ?
tu peux tester la date de modif de ce fichier (FileDateTime) et attendre une dizaine de secondes après cette date avant d'incorporer le fichier...
0
nablimohavb Messages postés 18 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 27 février 2009
26 févr. 2009 à 15:29
salut
je ne peut pas preciser le temp d'attente pour lire le fichier,car la reponse et reliée  à la quantitée des données envoyé, plus le fichier est volumineux -> plus  de temp à attendre

j'ai utilisé ces fonction mour mettre la main sur la commande de l'envoie et attendre jusqu'a quelle se termine
mais le probleme,et que des fois si la commande de l'envoie (patch.exe) se plante , l'application de plante aussi

         dim retval as long , pHandle as long , ret as long
         retval = Shell(App.Path & "patch.exe, vbMinimizedFocus)
         pHandle = OpenProcess(SYNCHRONIZE, False, retval)
         ret = WaitForSingleObject(pHandle, INFINITE)
         ret = CloseHandle(pHandle)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 févr. 2009 à 15:41
ok, c'est toi qui lances Patch.exe

c'est donc au poil...

http://www.vbfrance.com/codes/SHELLANDWAIT-EXECUTER-APPLICATION-ATTENDRE-FIN-RENVOYER-SON-CODE_34867.aspx

ainsi, en testant le code retour, tu sauras si le fichier est exploitable ou si patch a planté ^^
0
deleplace Messages postés 40 Date d'inscription mardi 4 octobre 2005 Statut Membre Dernière intervention 2 mars 2009
26 févr. 2009 à 23:36
Si tu fait un transfer par Socket
Il a faut arriver à les mettre en route
tu aura un interruption à la fin du transfert
en restant sur ton idée de Timer
tu peux tenter de déplacer ou renommer le fichier que tu veux lire
si apparait une erreur, c'est qu'il est encore ouvert
donc que le transfert n'est pas terminé
je ne peux pas te donner de code, je programme en VB6
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 févr. 2009 à 08:35
ben lui aussi, en VB6 ^^
0
nablimohavb Messages postés 18 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 27 février 2009
27 févr. 2009 à 10:11
Bonjours


excusez moi,ma description précedante manque un peut de détailles.
je fait l'envoie par un fichier .bat "Script.bat", ce fichier contient la commande suivante
"Patch.exe" WR  adressemachine1 adressemachine2 ..."
Comme la taille du fichier de données à envoyer augmente la durée de l'envoi ,le nb des machines
augmentent aussi la durée

Moi je ne m'interesse pas baucoup si le transfert est passée totalement avec succée,mais j'interesse a refaire l'envoie
chque fois qu'il echoue ou depasse une certaine durée
je veut derterminer la durée du processus d'envoi en cour en temp réel,et le comparer a une constante
private const temp=&H300000 (5min),
si le processus se plante et depasse cette durée,je le termine,pour que je puisse refaire l'envoie de nouveau
Comment je peut faire cette démarche?

Merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
27 févr. 2009 à 10:14
le bat ne contient que cette instruction ?

si oui, passes toi de l'utiliser, lance l'exe toi même
0
nablimohavb Messages postés 18 Date d'inscription lundi 9 avril 2007 Statut Membre Dernière intervention 27 février 2009
27 févr. 2009 à 10:25
Salut
l'operation d'envoie doit etre automatique,car le fichier de donnée est envoyé
par un serveur distant,dans dossier predéfini.
l'application doit verfiier chaque (10s) si le fichier existe ou pas,si oui elle execute l'envoie  
0
Rejoignez-nous