Erreur lors de la création d'un fichier sur une carte SD [Resolu]

Bonjour,

J’essaie de crée et ouvrir un fichier .txt sur une carte SD avec comme nom du fichier la date et l’heure (ex: 170504-12h59.txt) mais la ligne de code(ci-dessous) devant crée le fichier me retourne une erreur et je sais pas pourquoi.

myFile.open(filename, O_RDWR | O_CREAT | O_AT_END)

La variable filename est un tableau de caractères avec pour valeur 170504-12h59.txt.
Je fais une condition sur cette ligne qui est vue comme un booléen faux si une erreur se produit mais je n’ai pas d’indication sur l’erreur en question…

Je vous met le code utilisé pour construire le nom du fichier et la condition, si quelqu’un voit se qui pourait poser problème, j’apprécierais l’aide.

readDS1307time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,  &year);
  day=int(dayOfMonth);
  mont=int(month);
  String strnomfichier ="  ";
  String strmois    ="  ";
  String strjour    ="  ";
  String strminute  ="  ";
  
  if(month < 10){
    strmois = '0'+String(mont);
  }
  else{
    strmois = String(mont);
  }
  if(day < 10){
    strjour = '0'+String(day);
  }
  else{
    strjour = String(day);
  }
  if(minute < 10){
    strminute = '0'+String(minute);
  }
  else{
    strminute = String(minute);
  }
  strnomfichier = String(year) + strmois + strjour +'-'+ String(hour) + 'h' + strminute;
  strnomfichier = strnomfichier + ".txt";
  Serial.println(strnomfichier);
  char filename[strnomfichier.length()+1];
  strnomfichier.toCharArray(filename, sizeof(filename));
  Serial.println(filename);

  // open the file for write at end like the Native SD library
 if(!myFile.open(filename, O_RDWR | O_CREAT | O_AT_END)) {
    lcd.setCursor(0,1);
    lcd.print("Error");
    sd.errorHalt("opening file for write failed");
  }

Cdt,
Nathan

ton nom de fichier est long (plus de 8.3 caractères), est-ce que la prise en charge des noms longs est activée dans SdFat ?

Aucune idée, probablement pas ^^
On fait comment pour activer ça ?

dans le fichier SdFatConfig.h dans le dossier de la librairie.
avec les exemples fournis avec la librairie, est-ce que ça fonctionne, tu arrives à lire/écrire sur la SD ?
sinon tu peux essayer avec un nom de fichier fixe pour voir si ça marche. si ça marche alors c'est dans la string qu'il y a un soucis. il faut procéder par élimination pour trouver l'erreur

Oui avec les exemples et un nom fixe ça marche, c'est pour ça du coup je pense que c'est du à la longueur du nom du fichier.
J'ai regardé dans le fichier SdFatConfig.h mais j'ai pas trouvé comment activer la prise en charge des noms long..

c’est au tout début du fichier, un des premiers paramètres. mais il semble qu’il soit activé par défaut, en tout cas dans la dernière version disponible.
Voila ce que j’ai :

//------------------------------------------------------------------------------
/**
 * Set USE_LONG_FILE_NAMES nonzero to use long file names (LFN).
 * Long File Name are limited to a maximum length of 255 characters.
 *
 * This implementation allows 7-bit characters in the range
 * 0X20 to 0X7E except the following characters are not allowed:
 *
 *  < (less than)
 *  > (greater than)
 *  : (colon)
 *  " (double quote)
 *  / (forward slash)
 *  \ (backslash)
 *  | (vertical bar or pipe)
 *  ? (question mark)
 *  * (asterisk)
 *
 */
#define USE_LONG_FILE_NAMES 1

OK du coup c'était ma librairy qui était pas à jour, du coup j'ai télécharger la derniere version et ça marche niquel.

Merci pour ton aide et bonne continuation

super !

merci d'éditer ton premier post pour marque [resolu] dans le titre