Scelta nome file e cartella salvataggio SD

Ciao, ragazzi avrei la necessità di definire in modo dinamico sia il nome del file sia il nome della cartella nella quale salvare su una memoria SD.
Per quanto riguarda il nome del file ci sono riuscito senza problemi, ho un po' di problemi per quel che riguarda la cartella, infatti ho provato a definire un secondo vettore di char (che contiene i nomi da assegnare alle cartelle) per poi unirlo con quello che contiene i nomi dei file. Ma non funziona vi allego il codice, mi farebbe comodo qualche indicazione :grinning:

void saveTotSD(){
  char *name_mese[12]={
    "Gennaio.txt","Febbraio.txt","Marzo.txt","Aprile.txt","Maggio.txt","Giugno.txt","Luglio.txt","Agosto.txt","Settembre.txt","Ottobre.txt","Novembre.txt","Dicembre.txt"          }; 
  char *name_anno[3]={
    "2015/","2016/","2017/"}; 
  byte anno_corrente = (int) year - 15;
  char *name_file[1] = {name_mese[(int) month - 1]};
  //Ho provato ad unirli in questo modo usando la 'sprintf'
  //sprintf(name_file, "%s%s", name_anno[anno_corrente], name_mese[(int) month - 1]);
  Serial.println(name_file[0]);
  int filesavedold;
  int filesaved;
  if (SD.exists(name_file)) {
    SD.remove(name_file);
    Serial.print("Rimosso!");
  //}
  // open the file. note that only one file can be open at a time
  // so you have to close this one before opening another.
  myFiletotale = SD.open(name_file[0], FILE_WRITE);
  delay(100);
  filesavedold = myFiletotale.size();

  // if the file opened okay, write to it:
  if (myFiletotale) {
    myFiletotale.print("Utente1: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(0), 0));
    myFiletotale.print("Utente2: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(4), 1));
    myFiletotale.print("Utente3: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(8), 2));
    myFiletotale.print("Utente4: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(12), 3));
    myFiletotale.print("Utente5: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(16), 4));
    myFiletotale.print("Utente6: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(20), 5));
    myFiletotale.print("Utente7: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(24), 6));
    myFiletotale.print("Utente8: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(28), 7));
    myFiletotale.print("Utente9: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(32), 8));
    myFiletotale.print("Utente10: ");
    myFiletotale.println(convertSecondtoHour(EEPROM_readInt(36), 9));
    filesaved = myFiletotale.size();
    // close the file:
    myFiletotale.close();
  } 
  else {
    // if the file didn't open, print an error:
    Serial.print("error opening ");
    Serial.println(name_file[0]);
  }
  if(filesaved > filesavedold){
    lcd.setCursor(0,2);
    lcd.print("                    ");
    lcd.setCursor(0,3);
    lcd.print("                    ");
    lcd.setCursor(0,2);
    lcd.print("OK, salvato");
    delay(500);
    lcd.setCursor(0,2);
    lcd.print("                    ");
    lcd.setCursor(0,3);
    lcd.print("                    ");
  } 
  else {
    lcd.setCursor(0,2);
    lcd.print("Errore salvataggio! ");
    lcd.setCursor(0,3);
    lcd.print("                    ");
    delay(3000);
  }
}

Le variabili month e year, contengono rispettivamente il mese e l'anno attuale che rilevo con un RTC.
Grazie

  char *name_mese[12]={ "Gennaio",
                        "Febbraio",
                        "Marzo",
                        "Aprile",
                        "Maggio",
                        "Giugno",
                        "Luglio",
                        "Agosto",
                        "Settembre",
                        "Ottobre",
                        "Novembre",
                        "Dicembre"
                      }; 
  
  
  char path[32];
  int anno = 2015;
  int mese = 4;
  
  sprintf(path,"%d/%s.txt",anno,name_mese[mese]); 
  Serial.println(path);
  
  if ( SD.exists(path) ) 
  {
    SD.remove(path);
    Serial.print("Rimosso!");
  }

  myFiletotale = SD.open(path, FILE_WRITE);
  delay(100);

come trovi year e month? nel mio codice li ho settati manualmente perchè non sapevo che valori avessero.
se sono quelli di datetime allora scrivi:

mese = month;
anno = year + 1900;

Nel mio caso year e month sono variabili globali, quindi posso leggerle ovunque non ho bisogno di definirle.
Ma il codice che hai scritto funziona? O meglio ti crea il file?

non l’ho provato,ma teoricamente dovrebbe
ma le directory esistono sulla SD?

sprintf(path,"%d",anno);
if ( !SD.exist(path) )
    SD.mkdir(path);