Bonjour,
J'ai une application Delphi 10 dans laquelle, entre autre, je génère un fichier texte. Je veux simplement envoyer le fichier sur un serveur ftp distant. Je n'ai pas besoin de coller un composant sur la page de conception, cela doit être transparent pour l'utilisateur.
J'ai essayé trois méthodes que je n'arrive pas à finaliser :
1) La plus rustique Winexec, qui fonctionne presque.
Avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 InstructionsFTP(NomFichierEcrit,Chemin); CommandeDos := PAnsiChar(AnsiString('ftp -i -s:'+ Chemin+'instruction.txt')) ; Winexec(CommandeDos,SW_NORMAL); }
et j'obtiens cela dans la fenêtre DOS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 procedure InstructionsFTP (Fichier, Chemin : string); var tx:Textfile; begin AssignFile(tx,Chemin + 'instruction.txt'); {} ReWrite(tx); WriteLn(tx, 'OPEN xxxxxxx.org' ); WriteLn(tx, 'nom utilisateur' ); WriteLn(tx, 'motpasse' ); WriteLn(tx, 'ascii' ); WriteLn(tx, 'put '+ Fichier ); {WriteLn(tx, 'bye' );} CloseFile(tx); end;
ftp> OPEN xxxxxxxx.org
Connecté à xxxxxxx.org.
220 Bienvenue sur xxxxxxx de 123.fr
200 Always in UTF8 mode.
Utilisateur (xxxxxxxxxx: (none)) :
331 Please specify the password.
230 Login successful.
ftp> ascii
200 Switching to ASCII mode.
ftp> put C:\Users\............\monfichiertexte.txt
200 PORT command successful. Consider using PASV.
425 Failed to establish connection.
ftp>
Cela à fonctionner instantanément jusqu'à la ligne 200 PORT .... comprise, puis cela à mouliner pas mal de temps avant l'affichage de la ligne 425 ....
Evidemment il s'est bien créé un fichier monfichiertexte.txt sur le serveur ftp mais de 0 octet !
2) Je sais que winexec est obsolète mais pour quelques lignes de codes...
J'ai essayé ShellExecute :
J'ai bien mis ShellAPI dans le uses, mais là il ne se passe rien du tout. Pas de fenêtre Dos qui s'ouvre, rien sur le serveur ftp, et pas de message d'erreur, ni d'erreur d'exécution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 InstructionsFTP(NomFichierEcrit,Chemin); CommandeDos2 := PChar(AnsiString('ftp -i -s:'+ Chemin+'instruction.txt')) ; } ShellExecute(Handle, 'Open' ,CommandeDos2 , pchar(''), 0, SW_NORMAL);
3) J'ai voulu essayer Indy en ajoutant un composant sur la page de conception, quitte à ne pas l'afficher.
Je vais sur la palette d'outils dans le répertoire IndyClient et j'essaie de coller l'icône TIdFTP, mais j'ai en retour le message suivant :
Si vous avez une solution pour une de ces 3 méthodes, je vous en remercie d'avance.
Léo
Partager