VBA contourner un temps de réponse de ftp

mathspountz

XLDnaute Nouveau
Bonjour à tous,

J'ai une application qui effectue un scan de fichiers présents sur un ftp et enregistre le "dir" dans un fichier txt via une commande shell en .bat. Cette opération peut prendre 3 secondes, 15 minutes, 3 heures voir plus... Mais je fini toujours pas avoir mon txt.
Si je vois tourner le script trop longtemps, je peux l’arrêter à la main et je vois qu'il est sur doevents dans le boucle while. Si je kill le processus cmd, puis je fais recommencer le script au moment de la commande shell, ça passe en 3 secondes.

Le but serait d'automatiser cette opération lorsque le shell prends plus de 30 secondes. J'ai donc essayé ceci:
Pour info: la dernière ligne du bat est un echo qui créé un fichier out, ce qui permet d'identifier que le shell est terminé.

Code:
'Créer les instances
File_Txt = FreeFile
File_Bat = FreeFile
'Créer les dossiers
File_DirectoryList = Tool_Path & "\Admin\" & "Directory"
If Dir(File_DirectoryList & ".out") <> "" Then Kill (File_DirectoryList & ".out")
'Créer la commande Ftp
Open File_DirectoryList & ".txt" For Output As #File_Txt
Print #File_Txt, "open " & ftpAddress
Print #File_Txt, ftpUser
Print #File_Txt, ftpPassword
Print #File_Txt, "lcd " & dossier
Print #File_Txt, "dir " & dossier & "/", Tool_Path & "\Admin\liste_dir_Ftp.txt"
Print #File_Txt, "bye"
Close #File_Txt
'Créer le Batch Program
Open File_DirectoryList & ".bat" For Output As #File_Bat
Print #File_Bat, "ftp -s:" & File_DirectoryList & ".txt"
Print #File_Bat, "Echo ""Complete"" > " & File_DirectoryList & ".out"
Close #File_Bat

testAgain:
'Lancer le batch
Shell (File_DirectoryList & ".bat"), vbMinimizedNoFocus '', vbMinimizedNoFocus,vbHide
'Traitement
Currenttime = Now
Do While Dir(File_DirectoryList & ".out") = "" And Currenttime + TimeValue("00:00:30") >= Now
    DoEvents
Loop
If Dir(File_DirectoryList & ".out") = "" Then
    Shell ("taskkill /F /IM CMD.EXE")
    GoTo testAgain
End If

Malheureusement le processus cmd n'est pas correctement killé (je le retrouve encore dans le gestionnaire des tâches)...
Comment killer un CMD pendant qu'il tourne ?
Quelqu'un aurait-il une idée à ce sujet ?

PS: dans le même script j'utilise des bat pour uploader des fichiers mais je n'ai pas le même soucis. Le problème ne survient que quand je fais des dir.
 

david84

XLDnaute Barbatruc
Re : VBA contourner un temps de réponse de ftp

Bonjour,

si je comprends bien tu veux récupérer le chemin de fichiers placés sur un site ftp, est-ce cela ? Uniquement le chemin ou également d'autres infos comprises dans ces fichiers ?
Je n'ai pas du tout l'habitude d'utiliser les batch mais es-tu obligé de passer par un fichier bat pour faire ceci ?
Concernant le fait de fermer la fenêtre cmd.exe tu peux utiliser des API qui te permettent de cibler cette fenêtre (FindWindow) et de la fermer (SendMessage avec la constante WM_CLOSE).

Tu pourrais ainsi à l'issue de ta temporisation vérifier si cette fenêtre existe toujours (si n'est pas fermée) et donc si elle existe tu la ferme.

Ceci dit il existe également des API qui te permettent d'accéder à un site ftp (InternetConnect) et de récupérer ces fichiers (FtpGetFile).

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino