PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Problème de récupération de fichier sur un FTP
Problème de récupération de fichier sur un FTP
Débuté par Michael, 09 aoû. 2024 13:34 - 6 réponses
Posté le 09 août 2024 - 13:34
Bonjour,

J'utilise les fonctions FtpListeFichier() et FtpRecupere() pour me connecter à différents serveurs FTP de fournisseurs qui ne m'appartiennent pas, afin de récupérer des fichiers de livraison.
Je rencontre un soucis sur un serveur FTP en particulier.

La fonction FtpListeFichier() me retourne bien les fichiers présents dans le répertoire, mais y ajoute au début une date.
Par exemple si j'ai un fichier appelé "MonFichierA.txt", la valeur retournée par la fonction FtpListeFichier() sera "Aug 2024 23:00:05 GMT MonfichierA.txt".
Cette date semble correspondre à la date de dépôt du fichier sur le FTP.

Ceci empêche la fonction FtpRecupere() de télécharger le fichier.
A chaque fois, le message d'erreur indique que le fichier n'existe pas

J'utilise le même code depuis plusieurs années, sur 5 serveurs FTP différents (windows/linux) et je n'ai jamais rencontré ce soucis.

Avec le même code, le problème se pose uniquement sur mes 2 serveurs Windows Server 2016.
Aucun soucis sur 2 PC Windows 11 et sur 3 serveurs Windows Server 2022.

Je suis en version 28, dernière update faite.

L'erreur rencontrée par la fonction FtpRecupere() est :
Le fichier ou le répertoire /Download/SHIPMENT/Aug 2024 23:00:05 GMT MonfichierA.txt n'existe pas ou est inaccessible.
Détail de l'erreur système : 3


J'ai essayé plusieurs choses, sans succès :
- Forcer le répertoire en cours avant le FtpRecupere()
- Modifier le nom du fichier en supprimant la date avant le FtpRecupere()

En attendant de trouver une solution, j'ai basculer mon programme sur un serveur Windows 2022 au lieu du Windows 2016.

Merci d'avance pour vos idées.

Code pour lister les fichiers :
// Connexion au serveur FTP
gnFtpConnex = FTPConnecte(FTP_SERVEUR_SAFE,FTP_USER_SAFE,FTP_MDP_SAFE)
SI gnFtpConnex <> -1 ALORS

// Liste les fichiers sur le FTP
gnModeRcp = MODE_RCP_FTP
gnModeTransfert = ftpModeBinaire
nbFichiers = FTPListeFichier(gnFtpConnex,REP_FTP_RCP_SAFE + "*.csv",CreerReception,ftpFichier)
EcritLog("SAFECO : " + nbFichiers + " fichier(s), mode FTP")

// Déconnexion du FTP
FTPDéconnecte(gnFtpConnex)

// Erreur
SINON
EcritLogErreur("Impossible de se connecter au FTP : " + ErreurInfo(errMessage))
FIN


Code de la fonction CreerReception() appelée pour chaque fichier trouvé :
Procedure CreerReception(sMonFichier est une chaîne)

// Copie en local
SI FTPRécupère(gnFtpConnex,sMonFichier,gsREP_LOC_ATTENTE,"",gnModeTransfert) = Faux ALORS

sLogErreur = "Impossible de récupérer le fichier " + sMonFichier + RC + ErreurInfo(errMessage)
EcritLogErreur(sLogErreur)
RENVOYER Faux

FIN


Michaël.
Membre enregistré
2 653 messages
Popularité : +222 (260 votes)
Posté le 11 août 2024 - 21:36
Si tu installes un filezilla sur ton 2016 tu vois quoi ?

--
Cordialement,

Philippe SAINT-BERTIN
Posté le 02 septembre 2024 - 10:24
Bonjour,

Désolé pour le retard j'étais en congés.
Depuis Filezilla, tout fonctionne, quelque soit l'OS Server.
Membre enregistré
195 messages
Posté le 03 septembre 2024 - 10:22
Bonjour,

je suis étonné qu'il puisse exister un fichier dans le dossier que tu cites :

/Download/SHIPMENT/Aug 2024 23:00:05 GMT MonfichierA.txt

et pour cause, le caractère deux ( : ) est interdit dans un nom de fichier Windows !

Je pense qu'il faudrait plancher là-dessus...
Posté le 03 septembre 2024 - 12:27
bonjour,

votre méthode 'CreerReception' n'a pas le bon prototype

essayer de la modifier en utilisant le bon prototype voir si cela fonctionne

une piste à tester ;)

bon courage et bon dèv

->
https://doc.pcsoft.fr/fr-FR/?3040018
Posté le 04 septembre 2024 - 12:54
Oui je te confirme que le fichier ne se nomme pas comme ça quand on le consulte par Filezilla.
Il se nomme bien "MonfichierA.txt".

C'est Windev qui m'ajoute cet horodatage au début.
Membre enregistré
2 006 messages
Popularité : +53 (65 votes)
Posté le 04 septembre 2024 - 15:29
Bonjour,

Je ne suis pas sûr que la procédure callback de FTPListeFichier() permette de faire un FTPRécupère().
FTPListeFichier() renvoie une liste de fichiers qu'il faut ensuite parcourir dans une boucle qui contiendra le FTPRécupère().

--
Bon dev,
Jean-Pierre