Gambas France BETA


Pas de compte ? Incription

commande "dir" sur ftp

Ce sujet est résolu.

1
AuteurMessages
archi12#1 Posté le 25/3/2014 à 15:44:11
bonjour,
comment envoyer une commande "dir" à un serveur ftp ( et où avoir le résultat, sous quelle forme ) avec gambas-ftp ?
merci de votre aide
Flachy Joe#2 Posté le 25/3/2014 à 18:56:23
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
le principe de base de l'exécution d'une commande FTP : http://www.gambasforge.org/sujet-4544-mkdir-ftp-page-1.html#m2

la commande de listing est MLSD
;) Flachy Joe ;)
archi12#3 Posté le 26/3/2014 à 10:34:09
merci Flachy Joe pour cette reponse rapide.
ci_apres le source d'une partie de mon prog:

Public Sub butExec_Click()
Dim myFtp As New FtpClient
Dim sPath As String
Dim sLocalFileName As String
sPath = "ftp://192.168.0.251/public/files/"
sLocalFileName = "/home/user/Desktop/NAS_Exec"
myFtp.URL = sPath
myFtp.User = "user"
myFtp.Password = "password"
myFtp.Async = False
myFtp.Exec(["PWD"]) ' mon serveur NAS ne connait pas MLSD, mais seulement "dir repertoire"
End

mais comment indiquer où je veux la réponse (dans sLocalFileName) ?
(d'un autre coté, les fonctions put et get marchent tres bien avec gambas)
merci encore
Flachy Joe#4 Posté le 29/3/2014 à 19:14:01
Iguane : Il Gambas Uniquement pour Activer ses NEuronesAvec l'option Debug on peut obtenir le résultat des commandes dans la console mais il n'y a aucun moyen de les traiter et on ne peut pas récupérer directement la liste de fichiers du fait qu'elle nécessite l'utilisation préalable de la commande PORT ou PASV.

Les commande utilisables en passant par Exec sont donc limitées à celle ne fournissant rien en retour.

Par contre le contenu d'un répertoire peut être obtenu en faisant un Get avec l'URL définie sur le dossier :
1
2
3
4
5
6
7
8
9
10
11
12
PUBLIC SUB Button1_Click()

DIM l AS STRING

FtpClient1.URL = "ftp.fr.debian.org/"
FtpClient1.Async = FALSE
FtpClient1.Get()
FOR EACH l IN FtpClient1.Lines
DEBUG l
NEXT

END

FMain.Button1_Click.11: drwxr-xr-x 8 1000 1000 4096 Mar 29 15:37 debian
FMain.Button1_Click.11: drwxr-xr-x 8 1000 1000 4096 Oct 05 2012 debian-amd64
FMain.Button1_Click.11: drwxr-sr-x 6 1000 1000 72 Mar 29 15:15 debian-backports
FMain.Button1_Click.11: drwxr-xr-x 6 1000 1000 111 Mar 29 04:00 debian-non-US
FMain.Button1_Click.11: drwxrwsr-x 6 1000 1000 79 Mar 28 07:11 debian-security
FMain.Button1_Click.11: drwxr-sr-x 5 1000 1000 114 Nov 01 2011 debian-volatile
FMain.Button1_Click.11: drwxr-xr-x 2 1000 1000 6 Mar 29 15:00 tmp



;) Flachy Joe ;)
archi12#5 Posté le 30/3/2014 à 10:46:40
Merci Flashy Joe,
Il y a peut etre un moyen de rediriger debug vers ???
a investiguer
merci encore
Flachy Joe#6 Posté le 30/3/2014 à 11:52:41
Iguane : Il Gambas Uniquement pour Activer ses NEuronesJe me rend compte que je n'ai peut être pas été très clair :
l'option debug permettant d'obtenir le déroulé brute du transfert FTP est celle de l'objet FtpClient
1
FtpClient1.Debug=TRUE
. Les infos qui s'affichent alors ne sont à ma connaissance pas récupérables par le programme (et il y le souci du transfert passif).

Par contre la seconde méthode (Get sur le répertoire) fourni des infos directement exploitables dans le code (contenu de la variable l de mon exemple).
;) Flachy Joe ;)
archi12#7 Posté le 31/3/2014 à 15:09:00
Bonjour,
Merci de cette précision.
Je pense quand meme revenir à la bonne vieille méthode (que je maitrise mieux, et où toutes les commandes ftp sont acceptées, avec resultat visible pour chacune d'elle):
c'est suffisant pour une operation ponctuelle
création et execution d'un shell

Dim cFile As File
Dim cFilePath As String
Dim s, sResult As String
cFilePath = "/home/user/cFile.sh"
cFile = Open cFilePath For Write Create
Print #cFile, "#!/bin/sh"
' repertoire de reception d'un fichier
Print #cFile, "mkdir /home/user/localRep"
Print #cFile, "cd /home/user/localRep"
' on lance ftp
Print #cFile, "ftp -n 192.168.0.251 << END_SCRIPT"
Print #cFile, "user user password"
Print #cFile, "help"
Print #cFile, "pwd"
Print #cFile, "cd /PUBLIC/files"
Print #cFile, "pwd"
Print #cFile, "dir"
Print #cFile, "get ftpFile.txt"
Print #cFile, "quit"
Print #cFile, "END_SCRIPT"
' on quitte ftp
Print #cFile, "exit 0"
Close #cFile
Shell "chmod +x " & cFilePath To sResult
Exec [cFilePath] Wait To sResult
Print "sResult>\r\n" & sResult
Shell "ls -l /home/user/localRep" To sResult
Print "sResult>/r/n" & sResult

merci encore

1