IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Vérification de sauvegarde FTP sans utiliser la commande LS


Sujet :

Réseau C

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut Vérification de sauvegarde FTP sans utiliser la commande LS
    Bonjour

    Par recherche récursive je scrute tout le répertoire d'une carte SD et je souhaite vérifier que tous ces fichiers sont bien présents (et de la bonne taille) sur un serveur FTP, télécharger le fichier sur le FTP si nécessaire.
    Mon soucis est que je suis sur un microcontrôleur (cortexM4) qui a donc des ressources limitées (je me vois mal mettre en RAM la liste complète des fichiers présents sur le FTP pour ensuite scrupter la liste pour chaque fichier de ma carte SD.
    J'ai codé une solution que je pensais économe en ressource à savoir tenter de faire un openfile et en cas d'erreur faire le transfert du fichier, mais la réussite de l'open file ne me dit pas si le fichier est de la bonne taille !

    Je ne peux réserver que quelques ko de RAM pour faire ce job et je peux avoir sur le FTP des dizaines de milliers de fichiers. Je peux avoir tellement de fichiers sur le FTP qu'il apparait d’ailleurs peu judicieux de scruter quoi que ce soit sur le FTP !

    Du coup je ne vois pas comment procéder ; Connaissez vous une alternative à l'utilisation de la commande LS pour vérifier la présence (et connaitre la taille) d'un fichier sur un FTP ?

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    pourquoi ne pas utiliser ls ?
    pourquoi ne pas te connecter autrement qu'en ftp pour vérifier ça ?
    à priori il existe une fonction ftp SIZE.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour

    Merci pour la réponse

    Ls il y a 2 raisons
    >la première est que je n'arrive pas à recevoir la réponse du serveur avec ; est ce parce que je suis en mode passif ???
    > la seconde est qu'avec ls il me faudrait stocker toute la reponse et rechercher dedans mes fichiers. or je peux avori plusieurs dizaines de milliers de fichiers sur le FTP et je n'ai que 1ko de RAM pour faire ça.


    Se connecter autrement qu'en FTP pour vérifier ca ??? comment peut on se connecter à un serveur FTP autrement qu'en FTP ? je ne comprends pas désolé

    Pour SIZE, comme ls je n'arrive pas à avoir une réponse. En plus j'ai lu un truc qui disait que SIZE n’était pas supporté par tous les serveurs (norme FTP ++)

    PS : je fais des essais sur un FTP synology en local ( et TLS) et avec un FTP non TLS en ligne chez OVH.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Je viens d'avoir une idée, merci de me dire si c'est délirant

    Pour transférer mes fichiers sur le FTP je passe par une extension provisoire : le fichier NomFichier.csv est transféré en tant que NomFichier.temp et une fois le fichier bien transféré je renomme le NomFichier.tmp en NomFichier.csv

    ainsi pour savoir si les fichiers de ma carte SD ont bien été transférés sur le serveur il me faudrait faire un openFile de NomFichier.csv et NomFichier.temp. (erreur sur le openfile = fichier absent)
    Si le .temp existe alors le fichier a été transféré mais c'est à refaire
    Si le .temps n'existe pas mais que le .csv est présent alors ce fichier est déjà transféré

    Ça fonctionnerait ça ? ou ce serait 4684684684864848468x moins fiable que de vérifier la taille ?

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Ton dernier système tu vérifies queue dalle. Si ton fichier est ancien et tu dois uploader un nouveau, tu vas rien en faire parce qu'il existe déjà et n'a pas de .temp correspondant ?
    Si tu veux juste uploader un fichier une fois, à la limite...
    Ensuite, ls peut recevoir des paramètres, y compris le nom d'un fichier. http://linuxcommand.org/lc3_man_pages/ls1.html

    Se connecter autrement qu'en FTP pour vérifier ca ??? comment peut on se connecter à un serveur FTP autrement qu'en FTP ? je ne comprends pas désolé
    Ton truc c'est un serveur, une machine, que tu t'y connectes via un client FTP, putty ou n'importe quoi d'autre, ça dépend uniquement de ce que tu autorises dessus et comment tu le configures.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Mes fichiers sont des sortes de log pour une plage de temps donnée. Je cherche à être certain que les données partent bien sur le ftp mais les fichiers envoyés seront JAMAIS modifiés ou à re-envoyer.

    Il peut y avoir beaucoup de fichiers coté serveur du coup une liste serait monstrueuse et je n'ai pas de ram pour ça. (Utiliser la SD serait lent et source d'autres problemes). Je ne vois pas quoi en faire de le ou NLIST.

    Après n^20 échecs je suis pommé avec les commandes ftp. Je trouve pleins de docs qui présentent comme ce lien les commandes et leurs options mais je ne trouve pas un exemple de sequence et de syntaxe réelle. Moi avec SIZE (ou ls) le serveur me répond un truc gentil (en gros il a reçu la commande) mais je n'ai pas de taille ou de liste. J'ai essayé en faisant un openfile puis en appelant SIZE ou LIST sans paramètres. J'ai aussi essayé de juste me connecter au ftp puis d'envoyer une commande SIZE,LIST,NLIST ou ls en précisant en paramètre le chemin vers le fichier pour SIZE et LIST... rien.

    Déjà NLIST et ls c'est quoi la différence ?

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Je viens de découvrir que c'est mon code C que j'utilise sur mon arm cortex M4 qui ne permet pas de voir les reponses aux commandes ls SIZE etc

    sous dos j'ai pu connecter mes serveurs et avoir des reponses à ls
    mais je ne comprends vraiment pas ces différences de commandes :
    sous dos quand je fais help j'ai une liste avec mkdir, ls et j'en passe
    alors que à pleins d'endroits j'entends parler de ces commandes (dont le SIZE qui m'intéresse)
    https://fr.wikipedia.org/wiki/Liste_des_commandes_ftp
    je n'arrive pas a comprendre la différence entre les 2 listes de commandes
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Ton truc c'est un serveur, une machine, que tu t'y connectes via un client FTP, putty ou n'importe quoi d'autre, ça dépend uniquement de ce que tu autorises dessus et comment tu le configures.
    J'ai oublié de répondre à ce point. en fait je dois pouvoir connecter des serveurs ftp, n'importes lesquels et en tous cas que via FTP. Je dois en plus le faire ne mode passif. Outre le fait que je dois pouvoir connecter tout serveur ftp, je n'ai pas la main pour paramétrer quoi que ce soit sur le serveur.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Yesssseuuuuu

    Je suis toujours à la recherche d'une explication sur la différence entre
    et https://fr.wikipedia.org/wiki/Liste_des_commandes_ftp

    mais j'ai enfin réussi à faire fonctionner SIZE, j'oubliais juste d'ajouter un caractère de fin \r\n à ma commande !

    maintenant je reçois la même chose sur tous les serveurs que je teste
    FTP client: SIZE test/toto.txt
    FTP server: 213 1256
    Vu le mal que j'ai eu a trouver la syntaxe de la commande je la précise ici :
    Phase 1 connexion au ftp (connect, login etc...)
    Phase 2 envoi de la commande "SIZE test/toto.txt\r\n" (le \r\n est fondamental pour toute commande)

    Merci par avance pour vos lumières sur les 2 jeux de commande
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par petitours Voir le message
    Mes fichiers sont des sortes de log pour une plage de temps donnée. Je cherche à être certain que les données partent bien sur le ftp mais les fichiers envoyés seront JAMAIS [...] à re-envoyer.
    Quid d'un fichier qui a été envoyé partiellement (connexion interrompue lors du transfert) ?

    Je n'ai jamais travaillé avec le protocole ftp mais \r\n est dans toutes les docs donc ça me parait évident qu'il est nécessaire
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  11. #11
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    Avec la solution du fichier .temp la présence du .temp aurait témoigné de la connexion interrompue le coup d'avant. Mais c'est de l'histoire ancienne puisque avec SIZE c'est bien plus propre

    Le \r\n je l'ai vu dans aucune doc, c'est en cherchant pourquoi je ne recevais pas de réponse du serveur (même pas d'insultes) que j'ai remis en question ce que j'envoyais. Mais il est clair que je ne lis pas les bonnes doc vu que je n'ai pas compris la différence entre
    et https://fr.wikipedia.org/wiki/Liste_des_commandes_ftp
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Dans mon premier lien, la rfc
    The syntax of the SIZE command is:

    size = "Size" SP pathname CRLF
    Même commentcamarche (pourtant loin d'être une référence) l'indique
    Toutes les communications effectuées sur le canal de contrôle suivent les recommandations du protocole Telnet. Ainsi les commandes FTP sont des chaînes de caractères Telnet (en code NVT-ASCII) terminées par le code de fin de ligne Telnet (c'est-à-dire la séquence <CR>+<LF>, Carriage Return (retour chariot) suivi du caractère Line Feed, notée <CRLF>).
    Si la commande FTP admet un paramètre, celui-ci est séparé de la commande par un espace (<SP>).

    CR = carriage return = \r
    LF = line feed = \n


    Du peu que je sais et ai lu, c'est pas loin de la règle numéro 0 de l'utilisation de FTP.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #13
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    C'est pas faux

    Mais bon là je découvre que 2 fichiers identiques peuvent ne pas avoir la même taille !
    J'ai fait ma fonction de sauvegarde récursive qui prend chaque fichier de la SD, regarde la taille du fichier sur le serveur FTP et fait le transfert si le fichier est absent ou pas de la même taille
    Tout ça essayé sur mon FTPS synology local ça fonctionne à merveille. au deuxième passage la taille est vue comme identique et on ne refait pas le transfert.

    Après je fais le test sur un FTP OVH et là patatra,
    premier coup les fichiers ne sont pas présents donc ça transfert tout, ok
    deuxième passage, tous les fichiers du ftp sont vus avec une taille différente et sont donc tous retransférés !

    si je compare 2 fichiers, ils sont strictement identiques, le transfert s'est très bien passé. Ce sont des CSV et pas la moindre différence "utile"
    Dans notepad++ je vois juste que l'un est "UNIX" et l'autre "DOS/WINDOWS"
    Je ne m'attendais pas à celle là !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  14. #14
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 935
    Points : 2 014
    Points
    2 014
    Par défaut
    je teste en "Binary"

    yess ! je découvre que les fichiers transférés en par FTP en ASCII sont modifiés par le protocole pour "adapter" les fins de lignes à la plateforme ! mais why???
    bref, en faisant un transfert en binaire (ce qui n'est pas par defaut) on a pas ce problème.
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  15. #15
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 102
    Points
    1 102
    Par défaut
    Bonjour,

    Citation Envoyé par petitours Voir le message
    je teste en "Binary"

    yess ! je découvre que les fichiers transférés en par FTP en ASCII sont modifiés par le protocole pour "adapter" les fins de lignes à la plateforme ! mais why???
    bref, en faisant un transfert en binaire (ce qui n'est pas par defaut) on a pas ce problème.
    Par défaut, FTP considère que le transfert se fait en ASCII. Pour transférer un fichier sans le modifier il faut passer en mode binaire (Commande BINARY).
    Pour autant que je sache, le mode ASCII ne fait que l'adaptation des fins de lignes entre la plateforme source et la plateforme cible (CRLF pour DOS/WINDOWS, LF pour Unix, CR pour les anciens MAC)

    Cordialement

  16. #16
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Quel bibliothèque utilises-tu sur Cortex-M pour gérer tes fichiers ?

    Citation Envoyé par petitours Voir le message
    Mes fichiers sont des sortes de log pour une plage de temps donnée. Je cherche à être certain que les données partent bien sur le ftp mais les fichiers envoyés seront JAMAIS modifiés ou à re-envoyer
    Ne pourrais-tu pas ajouter un timestamp dans le nom de fichier ? Par exemple le log pour la journée d'aujourd'hui serait data_2017_08_28.log. Quand tu fais un transfert sur le FTP et que tous les envois se font avec succès, tu envoies un dernier fichier "'sentinelle" contenant le nom du dernier fichier "utile" envoyé. Par exemple, dernier_transfert.txt qui contiendrait data_2017_08_28.log.

    Ainsi, lorsque tu as besoin de faire un nouveau transfert, tu récupères juste ce fichier "sentinelle". S'il n'existe pas, c'est que tu n'as jamais fait de transfert ; sinon, tu sais où tu t'en étais arrêté la dernière fois. Tu n'auras plus qu'à chercher sur ta carte SD les fichiers dont le nom contient une date postérieure à la date donnée par le fichier "sentinelle" et à les envoyer sur ton serveur FTP. Si le transfert fonctionne, tu mets à jour le fichier "sentinelle". Et ainsi de suite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/11/2016, 14h19
  2. [Débutant] Commander une application sans utiliser les métodes sendkeys
    Par r.morel dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/11/2014, 12h43
  3. Problème sauvegarde ftp commandée par code VBA
    Par tdiscus dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/03/2013, 09h13
  4. Réponses: 6
    Dernier message: 24/09/2009, 17h44
  5. [MS-DOS] Comment utiliser la commande ftp ?
    Par Are-no dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/02/2007, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo