-
Bonjour à tou(te)s,
Tout est déjà dans le titre mais afin de mieux vous faire comprendre mon besoin, je chercher a pouvoir accéder aux informations d'un fichier contenu sur un serveur FTP comme par exemple sa date de modification avant de le télécharger. Cela peut également être sa taille par exemple. j'ai pas mal cherché sur internet et dans les bibliothèques mais je n'ai rien trouvé correspondant a mes attentes.
Quelqu'un sait-il comment faire? (merci a l'avance)
-
Tu peux essayer les commandes LIST et SIZE par exemple.
-
Bonjour, merci mais j'ai beau chercher, je n'ai rien trouvé pouvant m'aider a ce sujet sur LIST et SIZE. c'est possible d'avoir un peu plus de détail s'il vous plait? :-\
-
C'est une commande FTP, pas SFML.
Tu peux envoyer une commande FTP avec sendCommand (http://www.sfml-dev.org/documentation/2.3.1/classsf_1_1Ftp.php#a44e095103ecbce175a33eaf0820440ff).
Pour connaitre les paramètres associés à LIST et SIZE (ou à d'autres commandes FTP) j'imagine que c'est facilement trouvable sur ton moteur de recherche préféré. ;)
-
ok merci. j'ai essayé de voir de ce coté. effectivement il ya des fonctions a part. toutefois, je n'arrive pas a les utiliser correctement. j'ai ramené un bout de code avec moi. est-il possible de me dire ou es l'erreur? j'essaye de recuperer le détail de chaque fichier mais je ne vois déjà pas comment créer le lien avec le listing:
//[...connexion FTP reussie]
sf::Ftp::ListingResponse directory = ftp.getDirectoryListing();
const std::vector<std::string>& listing = directory.getListing();
sf::Ftp::Response detailfichier = ftp.sendCommand("LIST", "-r");
for (std::vector<std::string>::const_iterator it = listing.begin(); it != listing.end(); it++)
{
if (detailfichier.isOk()) std::cout << "fichier:" << *it << " detail:" << detailfichier.getMessage() << std::endl;
}
-
Bah si je prends la description de LIST sur wikipedia :
LIST Returns information of a file or directory if specified, else information of the current working directory is returned. If the server supports the '-R' command (e.g. 'LIST -R') then a recursive directory listing will be returned.
T'es censé donner un nom de fichier à la commande LIST non ? Et t'as récupéré les noms de tous les fichiers avec getListing() non ?
Donc faut que tu fasses un "LIST nomDeFichier" (pour chaque nom de fichier, là tu fais "LIST -r" qui te redonnes la liste des fichiers.
En gros ftp.sendCommand("LIST", *it); dans ta boucle si j'ai bien compris.
-
Ah mais ok je n'avais pas compris ça comme ca moi. Certes, j'ai tenté
for (std::vector<std::string>::const_iterator it = listing.begin(); it != listing.end(); it++)
{
detailfichier = ftp.sendCommand("LIST", *it);
std::cout << "fichier:" << detailfichier << std::endl;
}
Cependant il semblerait que mon programme ne veuille pas continuer la boucle lorsqu'il se heurte sur mon sendcommand(). Comme s'il attendait quelque chose ou je ne sais pas quoi. Mais il me semble que ça faisait la même qu'avec le "-r"... est ce que cela signifie que je doivent utiliser un thread? mais ça m'ettonnerait car c'est bizarre que ca bloque comme ca...
-
Jamais essayé, je ne saurais pas t'en dire plus. ;)
-
Alors... apres verification aupres de la commande FEAT (presentant les commandes supportés par le serveur), il ne m'indiquait pas la commande "LIST" j'en deduis donc que mon serveur Mutualisé ne prend pas cette commande. Toutefois, il m'affichait la commande "MDTM" qui affiche la date de modification d'un fichier. ainsi en faisant
ftp.sendCommand("MDTM", *it);
j'ai pu alors avoir les données de modification de mes fichiers :D