Effectivement, il y avait une erreur lors du premier paramétrage, voici le nouveau code:
#include <AutoItConstants.au3>
#include <Array.au3>
#include <Crypt.au3>
#include <File.au3>
#include <FTPEx.au3>
$sCheminINI = @ScriptDir & '\FTP_Param.ini'
$algo = $CALG_AES_256 ;le type d'algorithme
;Permet de limiter la possibilité de décrypter les identifiants depuis un autre ordinateur par simple copier coller du fichier ini
$pass = @ComputerName & @UserName
;-------------------------------------------------------------- Début de la partie paramétrage --------------------------------------------------------------
$sFileNameToSearch = IniRead($sCheminINI,"Param","File","")
If Not $sFileNameToSearch Then
;Nom du fichier à chercher (ajout du caractère joker "*")
$sFileNameToSearch = InputBox('Nom du fichier','Quel est le nom du fichier à chercher ?','jarltech*','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","File",$sFileNameToSearch) ;On enregistre l'info
EndIf
$sFileNameRename = IniRead($sCheminINI,"Param","FileRename","")
If Not $sFileNameRename Then
;Nom du fichier après renommage
$sFileNameRename = InputBox('Nom du fichier après renommage','Quel est le nom du fichier après renommage ?','jarltech.csv','',255,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","FileRename",$sFileNameRename ) ;On enregistre l'info
EndIf
$sServer = IniRead($sCheminINI,"Param","Server","")
If Not $sServer Then
;Nom ou IP du serveur FTP
$sServer = InputBox('Nom ou IP du serveur FTP','Quel est le Nom ou IP du serveur FTP ?','','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","Server",$sServer) ;On enregistre l'info
EndIf
$sUsernameCrypted = IniRead($sCheminINI,"Param","user","")
If Not $sUsernameCrypted Then
$sUsername = InputBox("Nom d'utilisateur","Quel est le Nom d'utilisateur ?",'','',240,130) ;Nom d'utilisateur
If @error Then Exit
$sUsernameCrypted = _Crypt_EncryptData($sUsername,_encrypt_phrase_user(), $algo)
IniWrite($sCheminINI,"Param","user", StringRight($sUsernameCrypted,stringlen($sUsernameCrypted)-2)) ;On enregistre l'info de manière cryptée
EndIf
$sPassCrypted = IniRead($sCheminINI,"Param","mdp","")
If Not $sPassCrypted Then
$sPass = InputBox('Mot de passe','Quel est le Mot de passe ?','','*',240,130) ;Mot de passe
If @error Then Exit
$sPassCrypted = _Crypt_EncryptData($sPass,_encrypt_phrase_mdp(), $algo)
IniWrite($sCheminINI,"Param","mdp", StringRight($sPassCrypted,stringlen($sPassCrypted)-2)) ;On enregistre l'info de manière cryptée
EndIf
$sRemoteFilePath = IniRead($sCheminINI,"Param","RemotePath","")
If Not $sRemoteFilePath Then
;Chemin sur serveur FTP
$sRemoteFilePath = InputBox('Chemin vers le répertoire distant','Quel est le chemin sur le serveur FTP ?','\','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","RemotePath",$sRemoteFilePath) ;On enregistre l'info
EndIf
;On remplace les / par des \ et on en ajoute un \ avant et après pour que le _FTP_FilePut fontionne
$sRemoteFilePath = StringReplace($sRemoteFilePath,'/','\')
If StringCompare(StringLeft($sRemoteFilePath,1),'\') <> 0 Then $sRemoteFilePath = '\' & $sRemoteFilePath
If StringCompare(StringRight($sRemoteFilePath,1),'\') <> 0 Then $sRemoteFilePath &= '\'
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$sUsernameDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sUsernameCrypted, _encrypt_phrase_user(), $algo)) ;On décrypte la valeur récupérée
$sPassDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sPassCrypted, _encrypt_phrase_mdp(), $algo)) ;On décrypte la valeur récupérée
;-------------------------------------------------------------- Fin de la partie paramétrage --------------------------------------------------------------
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsernameDecrypted, $sPassDecrypted)
If @error Then
MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERREUR=' & @error)
Else
Dim $sDrive, $sDir, $sFileName, $sExtension
Global $aDrives = DriveGetDrive($DT_ALL)
If @error Then
MsgBox(16, "Erreur de récupération de la liste des lecteurs", "Erreur : " & @error)
Else
Dim $tLastFileGetTime = 0
Dim $sCompleteFilePath,$aFileList
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche (on ne recherche que des fichiers et on exclue les fichiers/dossiers systèmes et cachés)
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES + $FLTAR_NOSYSTEM + $FLTAR_NOHIDDEN , $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
;Si le fichier a été trouvé au moins une fois
If Not @error Then
For $j=1 To $aFileList[0]
$tFileGetTime = FileGetTime($aFileList[$j],0,1)
If $tFileGetTime > $tLastFileGetTime Then ;On récupère les chemins du fichier le plus récent correspondant aux critères
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $sDrive & $sDir
$sCompleteFilePath = $aFileList[$j]
$tLastFileGetTime = $tFileGetTime
EndIf
Next
EndIf
Next
;On renomme le fichier
FileMove($sCompleteFilePath,$sCompletePath & $sFileNameRename)
;On place le fichier sur le serveur FTP
MsgBox(0,'$sRemoteFilePath & $sFileNameRename',$sRemoteFilePath & $sFileNameRename)
If _FTP_FilePut ($hConn, $sCompletePath & $sFileNameRename, $sRemoteFilePath & $sFileNameRename) Then
MsgBox(64,"Ok","Fichier exporté en FTP avec succès.")
Else
MsgBox(48,"Erreur","Erreur d'export par FTP.")
EndIf
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
;Histoire de compliquer le déchiffrage si quelqu'un essaie
Func _encrypt_phrase_user()
Return $pass & "user"
EndFunc
Func _encrypt_phrase_mdp()
Return $pass & "mdp"
EndFunc
En parallèle j'ai ajouté un message avec le chemin distant, peux-tu me confirmer qu'il est de l'ordre de:
Peux-tu me donner le code d'erreur qui est après "Erreur d'export en FTP:" ?
De plus, as-tu déjà testé l'export à partir d'un client FTP tel que FileZilla ? Si oui, peux-tu me donner les paramètres utilisés (hors identifiants) ?
Bon, c'est à n'y rien comprendre...
J'ai fait de nouveaux tests sur un site en ligne de chez www.000webhost.com, et cette fois, ce sont bien des "/" qu'il faut...
bilan, j'ai corrigé pour de bon le souci de premier paramétrage des identifiants (j'avais encore oublié quelque chose) et j'ai remis en place des "/" dans le chemin distant:
#include <AutoItConstants.au3>
#include <Array.au3>
#include <Crypt.au3>
#include <File.au3>
#include <FTPEx.au3>
$sCheminINI = @ScriptDir & '\FTP_Param.ini'
$algo = $CALG_AES_256 ;le type d'algorithme
;Permet de limiter la possibilité de décrypter les identifiants depuis un autre ordinateur par simple copier coller du fichier ini
$pass = @ComputerName & @UserName
;-------------------------------------------------------------- Début de la partie paramétrage --------------------------------------------------------------
$sFileNameToSearch = IniRead($sCheminINI,"Param","File","")
If Not $sFileNameToSearch Then
;Nom du fichier à chercher (ajout du caractère joker "*")
$sFileNameToSearch = InputBox('Nom du fichier','Quel est le nom du fichier à chercher ?','jarltech*','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","File",$sFileNameToSearch) ;On enregistre l'info
EndIf
$sFileNameRename = IniRead($sCheminINI,"Param","FileRename","")
If Not $sFileNameRename Then
;Nom du fichier après renommage
$sFileNameRename = InputBox('Nom du fichier après renommage','Quel est le nom du fichier après renommage ?','jarltech.csv','',255,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","FileRename",$sFileNameRename ) ;On enregistre l'info
EndIf
$sServer = IniRead($sCheminINI,"Param","Server","")
If Not $sServer Then
;Nom ou IP du serveur FTP
$sServer = InputBox('Nom ou IP du serveur FTP','Quel est le Nom ou IP du serveur FTP ?','','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","Server",$sServer) ;On enregistre l'info
EndIf
$sUsernameCrypted = IniRead($sCheminINI,"Param","user","")
If Not $sUsernameCrypted Then
$sUsername = InputBox("Nom d'utilisateur","Quel est le Nom d'utilisateur ?",'','',240,130) ;Nom d'utilisateur
If @error Then Exit
$sUsernameCrypted = _Crypt_EncryptData($sUsername,_encrypt_phrase_user(), $algo)
$sUsernameCrypted = StringRight($sUsernameCrypted,stringlen($sUsernameCrypted)-2)
IniWrite($sCheminINI,"Param","user", $sUsernameCrypted) ;On enregistre l'info de manière cryptée
EndIf
$sPassCrypted = IniRead($sCheminINI,"Param","mdp","")
If Not $sPassCrypted Then
$sPass = InputBox('Mot de passe','Quel est le Mot de passe ?','','*',240,130) ;Mot de passe
If @error Then Exit
$sPassCrypted = _Crypt_EncryptData($sPass,_encrypt_phrase_mdp(), $algo)
$sPassCrypted = StringRight($sPassCrypted,stringlen($sPassCrypted)-2)
IniWrite($sCheminINI,"Param","mdp",$sPassCrypted ) ;On enregistre l'info de manière cryptée
EndIf
$sRemoteFilePath = IniRead($sCheminINI,"Param","RemotePath","")
If Not $sRemoteFilePath Then
;Chemin sur serveur FTP
$sRemoteFilePath = InputBox('Chemin vers le répertoire distant','Quel est le chemin sur le serveur FTP ?','\','',240,130)
If @error Then Exit
IniWrite($sCheminINI,"Param","RemotePath",$sRemoteFilePath) ;On enregistre l'info
EndIf
;On remplace les \ par des / et on en ajoute un / avant et après pour que le _FTP_FilePut fontionne
$sRemoteFilePath = StringReplace($sRemoteFilePath,'\','/')
If StringCompare(StringLeft($sRemoteFilePath,1),'/') <> 0 Then $sRemoteFilePath = '/' & $sRemoteFilePath
If StringCompare(StringRight($sRemoteFilePath,1),'/') <> 0 Then $sRemoteFilePath &= '/'
$sConnexionName = 'Ma Connexion FTP' ;Peut importe le nom, mais il en faut un
$sUsernameDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sUsernameCrypted, _encrypt_phrase_user(), $algo)) ;On décrypte la valeur récupérée
$sPassDecrypted = BinaryToString(_Crypt_DecryptData("0x" & $sPassCrypted, _encrypt_phrase_mdp(), $algo)) ;On décrypte la valeur récupérée
;-------------------------------------------------------------- Fin de la partie paramétrage --------------------------------------------------------------
$hOpen = _FTP_Open($sConnexionName)
$hConn = _FTP_Connect($hOpen, $sServer, $sUsernameDecrypted, $sPassDecrypted)
If @error Then ;LE TEMPS DES TESTS
MsgBox($MB_SYSTEMMODAL, '_FTP_Connect', 'ERREUR=' & @error)
Else
Dim $sDrive, $sDir, $sFileName, $sExtension
Global $aDrives = DriveGetDrive($DT_ALL)
If @error Then
MsgBox(16, "Erreur de récupération de la liste des lecteurs", "Erreur : " & @error)
Else
Dim $tLastFileGetTime = 0
Dim $sCompleteFilePath,$aFileList
;Pour chaque lecteur
For $i = 1 To $aDrives[0]
;On lance la recherche (on ne recherche que des fichiers et on exclue les fichiers/dossiers systèmes et cachés)
$aFileList = _FileListToArrayRec($aDrives[$i] & "\", $sFileNameToSearch, $FLTAR_FILES + $FLTAR_NOSYSTEM + $FLTAR_NOHIDDEN , $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
;Si le fichier a été trouvé au moins une fois
If Not @error Then
For $j=1 To $aFileList[0]
$tFileGetTime = FileGetTime($aFileList[$j],0,1)
If $tFileGetTime > $tLastFileGetTime Then ;On récupère les chemins du fichier le plus récent correspondant aux critères
$sDrive = $sDir = $sFileName = $sExtension = ""
$aPath = _PathSplit ( $aFileList[$j], $sDrive, $sDir, $sFileName, $sExtension)
$sCompletePath = $sDrive & $sDir
$sCompleteFilePath = $aFileList[$j]
$tLastFileGetTime = $tFileGetTime
EndIf
Next
EndIf
Next
;On renomme le fichier
FileMove($sCompleteFilePath,$sCompletePath & $sFileNameRename)
;On place le fichier sur le serveur FTP
If _FTP_FilePut($hConn, $sCompletePath & $sFileNameRename, $sRemoteFilePath & $sFileNameRename ) Then
MsgBox(64,"Ok","Fichier exporté en FTP avec succès.")
Else
Local $Err,$sFTP_Message
_FTP_GetLastResponseInfo($Err, $sFTP_Message)
MsgBox(48,"Erreur","Erreur d'export en FTP:" & @CRLF & 'Erreur=' & $Err & @CRLF & 'FTP_Message:' & @CRLF & $sFTP_Message)
EndIf
EndIf
EndIf
$iFtpc = _FTP_Close($hConn)
$iFtpo = _FTP_Close($hOpen)
;Histoire de compliquer le déchiffrage si quelqu'un essaie
Func _encrypt_phrase_user()
Return $pass & "user"
EndFunc
Func _encrypt_phrase_mdp()
Return $pass & "mdp"
EndFunc
Peux-tu me donner le code d'erreur qui est après "Erreur d'export en FTP:" ?
De plus, as-tu déjà testé l'export à partir d'un client FTP tel que FileZilla ? Si oui, peux-tu me donner les paramètres utilisés (hors identifiants) ?
Bon, c'est à n'y rien comprendre...
J'ai fait de nouveaux tests sur un site en ligne de chez www.000webhost.com, et cette fois, ce sont bien des "/" qu'il faut...
Edité par Blaster13 il y a environ 7 heures
Excuse moi, j'ai pas eu le temps hier pour te répondre donc :
j'avais pas de code erreur sa me disait juste erreur d'export par FTP
Oui j'ai déjà utiliser et réussi a exporter un fichier grâce a filezilla client, j'utilise le même mdp, le même identifiant, le même host et le port 21 par contre a chaque fois j'ai un message de sécurité (dis moi si sa t'intéresse au cas ou car je me souviens plus trop de ça que sa disait)
je test le nouveau code et j'édit en dessous le résultat
C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi
Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?
Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?
Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?
Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ?
- Edité par QuentinTréheux 23 décembre 2018 à 5:59:24
"C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi :D:p:magicien:" -> Yeaaaaaaaaaaaaaah !!! On y est arrivé
"Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?" -> C'est là où j'hallucine: Peut-être que dans les premiers tests, j'avais oublié de contrôler qu'il y avait bien un '/' avant et après le chemin distant. De plus dans mon premier test perso, ça ne fonctionnait qu'avec les '\' mais c'était sur un serveur au boulot et pas sur le web, ça a certainement eu une incidence.
"Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?" -> C'est déjà le cas normalement, tu m'avais fait la demande, d'où l'utilisation de la fonction "FileGetTime", je te laisse contrôler.
"Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?" -> Je n'ai jamais fait auparavant, mais on peut essayer. Je te propose d'ouvrir un autre sujet plutôt (toujours dans le but de pouvoir aider d'autres personnes) et de m'indiquer quand ce sera fait. Par contre il me faudra au moins le fournisseur de messagerie utilisé (Yahoo, Gmail, ...) car Thunderbird n'est qu'un client de messagerie. Et le nom de la PJ ou l'objet du mail afin de déterminer la PJ à récupérer.
Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ? -> En fait ça fait près de 10 ans que j'ai connu AutoIt, à l'origine pour réaliser des installations automatisées de logiciels, et j'ai trouvé cet outil très intuitif et complet, il existe plein d'exemples sur le Net (il y a aussi un tuto sur le site du Zéro) et l'aide est généralement complète (un peu moins pour la partie FTP )
"C'EST BOOOOONNNN ça fonctionne GROS GG mec vraiment merci a toi :D:p:magicien:" -> Yeaaaaaaaaaaaaaah !!! On y est arrivé
"Du coup est ce que tu sais a quoi était du le dysfonctionnement avant ?" -> C'est là où j'hallucine: Peut-être que dans les premiers tests, j'avais oublié de contrôler qu'il y avait bien un '/' avant et après le chemin distant. De plus dans mon premier test perso, ça ne fonctionnait qu'avec les '\' mais c'était sur un serveur au boulot et pas sur le web, ça a certainement eu une incidence.
"Autre question est-il possible que lors de la recherche des fichiers contenant le mot jarltech on puisse prendre le plus récent ?" -> C'est déjà le cas normalement, tu m'avais fait la demande, d'où l'utilisation de la fonction "FileGetTime", je te laisse contrôler.
"Et autre question : le fichier on le reçois par mail (via thunderbird) en pièce jointe, et on doit a chaque fois enregistrer le ficher. Est-il possible dans le script de lui faire enregistrer la pièces jointe automatiquement ? (juste a titre d'info ^^) normalement mon ancien tuteur de stage car je ne suis plu en stage peut le récupérer déjà automatiquement, mais je pose la question a titre perso pour savoir si c'est fesable et si oui si c'est possible que tu m'explique mais comme on s'éloigne du sujet peut être en mp ?" -> Je n'ai jamais fait auparavant, mais on peut essayer. Je te propose d'ouvrir un autre sujet plutôt (toujours dans le but de pouvoir aider d'autres personnes) et de m'indiquer quand ce sera fait. Par contre il me faudra au moins le fournisseur de messagerie utilisé (Yahoo, Gmail, ...) car Thunderbird n'est qu'un client de messagerie. Et le nom de la PJ ou l'objet du mail afin de déterminer la PJ à récupérer.
Et information qui pourrait aider autre personne : Qu'as tu fais comme cour pour réussir a faire ça ? -> En fait ça fait près de 10 ans que j'ai connu AutoIt, à l'origine pour réaliser des installations automatisées de logiciels, et j'ai trouvé cet outil très intuitif et complet, il existe plein d'exemples sur le Net (il y a aussi un tuto sur le site du Zéro) et l'aide est généralement complète (un peu moins pour la partie FTP )
ok ok merci pour tes réponses je t'enverrai un message en pv lorsque j'aurai créer un nouveau sujet
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre
Créateur de scripts d'automatisation en tout genre