[Résolu]Modification d'un fichier présent sur une carte SD

Bonsoir à tous,

Je vais essayer de vous expliquer mon problème.

J'essaye de créer un système de domotique géré par un Arduino Mega + shield ethernet + shield téléinfo + relais. Actuellement, lors du setup du programme, la carte va chercher un fichier de configuration présent sur la carte SD et bascule les pins de la carte soit en entrées ou en sorties suivant les paramètres de ce fichier.

Exemple du fichiers de configuration : CES01=OD CES02=ID CES03=ID ... Etc pour toute les pins.

Jusque la ok mais... n'ayant pas d'ordinateur à coté de cet arduino et ne voulant pas démonter la carte SD à chaque fois que je veux changer une entrée en sortie, j'aurais aimé savoir si il était possible d'acceder au fichier, de se positionner sur la bonne ligne, de modifier la valeur du fichier de configuration, de sauvegarder et de redémarrer la carte ? (Pour reprendre mon exemple du fichier de configuration plus haut, j'aimerais que la ligne CES03=ID se transforme en CES03=OD, sans modifier les autres lignes et tout ça, géré par l'arduino via une commande faite par la liaison ethernet.)

D'avance, je vous remercie de toute aide ou pistes que vous pourriez me donner. Cordialement

Personne n'a d'avis sur le sujet ou sait si cela est possible ?

Car malgré mes recherches, je n'ai rien trouvé la dessus. La seule solution que j'ai pu trouver est d'effacer le fichier et d'en recréer un mais cette solution ne conviendrai pas

Si tu regardes la classe SD, il y a des méthodes de lecture et d'écriture read, write ainsi que des méthodes pour gérer les déplacements dans le fichier seek, position. Donc on est en droit de supposer qu'il y a moyen de résoudre ton problème. Tu avances dans le fichier pour rechercher la zone à modifier, tu t'y positionne avec seek, tu fais une écriture et tu refermes le fichier.

fdufnews: Si tu regardes la classe SD, il y a des méthodes de lecture et d'écriture read, write ainsi que des méthodes pour gérer les déplacements dans le fichier seek, position. Donc on est en droit de supposer qu'il y a moyen de résoudre ton problème. Tu avances dans le fichier pour rechercher la zone à modifier, tu t'y positionne avec seek, tu fais une écriture et tu refermes le fichier.

Oui je suis partit rechercher de ce côté la aussi mais je n'ai rien trouvé concernant la suppression car que va t'il se passer lorsque j'écris ? Les caractères déjà existants vont être écrasés ou déplacés ? Les lignes suivantes vont elles être décalées ?

Les caractères écrits vont remplacer les précédents, donc cette méthode ne fonctionne que si les valeurs ont la même taille. Il me semble plus judicieux de réécrire un nouveau fichier (avec un nom temporaire), puis de supprimer l'ancien et ensuite de renommer le nouveau. Il n'y a pas forcément besoin de redémarrer le sketch, mais ça dépend vraiement de la structure de ton programme.

La demande au départ concernait le remplacement d'un caractère par un autre donc sans modification de la longueur de la chaîne.

Oui, mon souhait était de ne pas avoir à effacer et à recréer le même fichier à chaque modification car j'ai peur de saturer la ram à charger tout le fichier et à travailler dessus.

La longueur de la chaîne ne sera pas modifiée car les éléments remplacés ont tous la même taille et je crois que c'est la meilleure solution. Je vais essayer de creuser le sujet.

Merci de votre aide. Je ne manquerai pas de vous tenir informé

Bonjour, Sur carte SD avec juste la librairie SD.h tu es limité, utilises plutôt la librairie SdFat.h et ses fichiers fournis dans le même package et utilises les en fonction de tes besoins, moi j'ai voulu sauvegarder l'ancien fichier en le renommant .bak et en créant un nouveau fichier de config (un peu comme toi) et avec la librairie SD "rename" n'existe pas. De plus il te faut savoir que sur SD tu n'es pas sur un disque dur, le mieux est de refaire un fichier et sauver l'ancien(s) mais attention une carte SD a une durée de vie et si c'est trop souvent, elle finira par ne plus prendre d'enregistrement. La mémoire contenu dans la carte est dite "Flash" par flash on entend faire fondre des fusible (en quelques sortes) mais leur nombre est limité à environ 100000, bon tu vas me dire avant d'arriver là... mais ca vient plus vite que tu ne le penses, j'en ai fais les frais... Si tu as d'autres question n'hesites pas.

Merci de votre aide. Avec les fonctions seek et position, ça fonctionne comme je veux.