nombre de fichiers présents sur une carte SD ?

Bonjour à tous,

Je viens vers toujours pour des questions de gestion de carte SD.

Pour éviter de réecrire sur des fichiers déja utilisés et bien séparer mes différentes mesures, je souhaiterai compter le nombre de fichiers présents sur la carte SD et créer un nouveau fichier dépendant de ce nombre...

Par exemple :

Se la carte contient 15 fichiers :

i = 15

alors

String Filename = "Mesure" + String(i+1)+".txt" ;

file = SD.open(fileName, FILE_WRITE) ;

Mais pour cela je dois compter le nombre de fichiers présents sur la carte SD, savez-vous comment réaliser cette opération ?

Merci d'avance

Avec openNextFile pour parcourir un répertoire et dénombrer les fichiers. Dans l'exemple donné dans le lien ci-dessus, la fonction est récursive et parcourt l'arborescence ce que tu ne souhaites sans doute pas faire dans ton cas.

merci j’ai bien vu ton lien…

Il m’a donné l’idée de tenté ceci :

// --- calcul du nombre de fichiers présents dans la SD :
  
  int Nbfile = 0 ;
  File root;
  root = SD.open("/");
  File testfile = root.openNextFile();
  Serial.println("testfile :  " + String(testfile) + " ");
  while (! testfile)
  {
    Nbfile = Nbfile + 1;
    testfile = root.openNextFile();
  }
  Serial.println("il y a  " + String(Nbfile) + " fichiers !");
  // --- fin calcul

cependant cela ne donne pas le bon nombre de fichiers et donne toujours Nbfile = 0 alors qu’il y a 7 fichiers txt sur la sd…

Des idées ?

Hello,

Une autre possibilité serait de sauvegarder ce compteur dans un fichier (index.dat par exemple). Lire ce fichier, récupérer la valeur, l’incrémenter, sauvegarder le fichier, et créer un nouveau fichier indexé.

Tu fais ton test à l'envers

  while (! testfile)
  {
    Nbfile = Nbfile + 1;
    testfile = root.openNextFile();
  }

Testfile est non nul s'il y a des fichiers. Essaye ça

  while (testfile)
  {
    Nbfile = Nbfile + 1;
    testfile = root.openNextFile();
  }

En toute rigueur, il faudrait tester si testfile.isDirectory() est vrai. Sauf si tu es certain qu'il n'y a pas de sous-répertoire sur ta carte

merci, ça fonctionne très bien avec le test sur vrai et non sur faux .

Petit problème supplémentaire :

Maintenant je veux créer mon fichier avec son nom qui dépend du nombre de fichiers préalablement compté.

Pour cela je fais :

  //long char filename_s = '/Mesure' + char(Nbfile+1)+'.txt' ;  
  
  //char fileName[] = long char(filename_s) ;  
  String fileName = "/Mesure" + String(Nbfile+1)+".txt" ; 
  
  // ouverture du fichier
  
  file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture
  file.seek(file.size()); // positionnement à la fin du fichier
  file.println(" debut programme " );
  file.close(); // ferme le fichier

Cependant je tombe alors sur des erreur de type au niveau de la fonction SD.open , l'erreur est la suivante : File open(const char *filename, uint8_t mode = FILE_READ);

J'ai alors essayé ceci :

char filename_s = '/Mesure' + char(Nbfile+1)+'.txt' ;

mais cela me dit impossible pour un char ...

Des idées ???

Encore merci d'avance ;p

Essaye ça:

char filename[14];

sprintf(filename,"/Mesure%02d.txt",Nbfile+1);
file = SD.open(fileName, FILE_WRITE); // ouvre le fichier en écriture