# Problema con Nome File e Array

**URL:** <https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669>\
**Category:** Software\
**Created:** [July 12, 2022, 7:14am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669 "2022-07-12T07:14:03Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 7:14am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/1 "2022-07-12T07:14:03Z")

</div>

Ciao ragazzi, ho un problema a caricare un array di stringhe con i nomi dei files letti da una schedina SD .  
Carico l'array con i nomi dei files, usando indici diversi (prima 0 e poi 1).  
Quando stampo l'array in tutti gli indici c'è sempre l'ultimo nome file!  
Qualcuno mi sa dire dove sbaglio?

Questo è l'output:  
Test  
VS1053 found  
Caricamento Array  
TRACK002.MP3  
TRACK001.MP3  
Stampa Array  
TRACK001.MP3  
TRACK001.MP3

Uso Arduino UNO

grazie!

```cpp
#include <SPI.h> //scheda SD 
#include <Adafruit_VS1053.h> //Lettore musicale
#include <SD.h> //scheda SD
#define BREAKOUT_RESET 9 // VS1053 reset pin (output)
#define BREAKOUT_CS 10 // VS1053 chip select pin (output)
#define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output)
#define SHIELD_RESET -1 // VS1053 reset pin (unused!)
#define SHIELD_CS 7 // VS1053 chip select pin (output)
#define SHIELD_DCS 6 // VS1053 Data/command select pin (output)
#define CARDCS 4 // Card chip select pin
#define DREQ 3 // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

char *myStrings[6]; 
File MyFile;

void setup() {
  Serial.begin(9600);
  Serial.println("Test");

  if (! musicPlayer.begin()) { // initialise the music player
    Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
    while (1);
  }
  Serial.println(F("VS1053 found"));

  if (!SD.begin(CARDCS)) {
    Serial.println(F("SD failed, or not present"));
    while (1); // don't do anything more
  }

  Serial.println("Caricamento Array");

  MyFile = SD.open("TRACK002.MP3", FILE_READ );
  if (MyFile) {
    myStrings[0] = MyFile.name();  
    Serial.println(myStrings[0]);
    MyFile.close();
  }
  MyFile = SD.open("TRACK001.MP3", FILE_READ );
  if (MyFile) {
    myStrings[1] = MyFile.name();
    Serial.println(myStrings[1]);
    MyFile.close();
  }
  Serial.println("Stampa Array");
  Serial.println(myStrings[0]);
  Serial.println(myStrings[1]);

}
void loop() {

}

```

---

<div class="post-metadata">

**Author:** ![gpb01](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/gpb01/32/830685_2.png) [@gpb01](https://forum.arduino.cc/u/gpb01)\
**Post date:** [July 12, 2022, 7:57am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/2 "2022-07-12T07:57:14Z")

</div>

Buongiorno,  
essendo il tuo primo post nella sezione **Italiana** del forum, **nel rispetto del regolamento** di detta sezione (_… punto 13, primo capoverso_), ti chiedo cortesemente di **presentarti** [IN QUESTO THREAD](http://forum.arduino.cc/index.php?topic=113640.0) (_spiegando **bene** quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere **solo** una riga di saluto_) e di **leggere con molta attenzione** tutto il su citato [REGOLAMENTO](http://forum.arduino.cc/index.php?topic=149082.0) ... Grazie. 🙂

Guglielmo

_P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, **nessuno ti potrà rispondere** , quindi ti consiglio di farla al più presto. 😉_

---

<div class="post-metadata">

**Author:** ![andreaber](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/andreaber/32/1013044_2.png) [@andreaber](https://forum.arduino.cc/u/andreaber)\
**Post date:** [July 12, 2022, 9:30am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/3 "2022-07-12T09:30:15Z")

</div>

ciao

tu hai creato un array di puntatori a char

```cpp
char *myStrings[6];

```

però alla sua posizione "0" ed "1" passi lo stesso puntatore:

```cpp
myStrings[0] = MyFile.name();
myStrings[1] = MyFile.name();

```

questo puntatore contiene "valori" diversi in momenti diversi ma è lo stesso spazio di memoria...quindi quando alla fine stampi il contenuto puntato dalla tua array in realtà stampi lo stesso, ultimo, contenuto del MyFile.name().

per risolvere dovresti crearti un array di stringhe; e passare il nome che in quel momento ha MyFile.name() tramite una funzione di string.h del tipo:

```cpp
char * strcpy ( char * destination, const char * source );

```

vedi [QUESTO](https://cplusplus.com/reference/cstring/strcpy/) link.

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1286411_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [July 12, 2022, 9:47am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/4 "2022-07-12T09:47:05Z")

</div>

Non solo

Mystrings è un array di 6 puntatori a caratteri

A prima vista sembra un array di 6 stringhe

Ma non è così

Perché a questi 6 puntatori non corrispondono 6 aree di memoria allocata

e poi, scusa, che senso ha caricare in un array il nome file (conosciuto) di un file che hai aperto tu conoscendone il nome file

ammenocchè non sia per verificarne l'effettiva presenza nella memoria di massa

e comunque farlo passo a passo invece che in un ciclo

carica un array bidimensionale di caratteri ( anche questo sembra un array di stringhe)

```cpp
char nomifile[6][12];
```

per poi inizializzarli

```cpp
strcpy(nomifile[0], "file......
```

oppure vedi se sono dichiarabili come

```cpp
char nomifile[6][12]={"...","...",..."};
```

hai visto mai che con GCC funzioni, la prova costa poco

poi se il file indice i risulta inesistente ne "annulli" il nome

```cpp
nomifile[i][0]=0;
```

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 11:47am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/5 "2022-07-12T11:47:08Z")

</div>

Grazie Andrea,  
sto seguendo il tuo suggerimento.  
Ancora non va ma ci provo.  
ciao

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 11:48am UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/6 "2022-07-12T11:48:44Z")

</div>

Ciao, grazie dei suggerimenti.  
L'esempio è solo per spiegare la necessità.  
Il mio scopo è caricare in un array di stringhe il contenuto di una  
directory della scheda SD.  
Continuo a provare  
Ciao

---

<div class="post-metadata">

**Author:** ![andreaber](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/andreaber/32/1013044_2.png) [@andreaber](https://forum.arduino.cc/u/andreaber)\
**Post date:** [July 12, 2022, 12:42pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/7 "2022-07-12T12:42:20Z")

</div>

ciao

pubblica quello che hai fatto e che non ti funziona che ci diamo uno sguardo...

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 1:05pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/8 "2022-07-12T13:05:48Z")

</div>

Ciao Andrea,  
adesso , basandomi sul suggerimento di Standardoil, sembra funzionare, anche se con solo due righe dell'array. Dovrò implementare un loop sulla directory per gestire tante righe.

Sarebbe ben accetto un consiglio su come caricare in un array con centinaia di nomi (vista la poca memoria di Arduino Uno).  
Grazie mille  
ciao

Il codice attuale funzionante quindi è il seguente:

```cpp

#include <SPI.h> //scheda SD 
#include <Adafruit_VS1053.h> //Lettore musicale
#include <SD.h> //scheda SD
#define BREAKOUT_RESET 9 // VS1053 reset pin (output)
#define BREAKOUT_CS 10 // VS1053 chip select pin (output)
#define BREAKOUT_DCS 8 // VS1053 Data/command select pin (output)
#define SHIELD_RESET -1 // VS1053 reset pin (unused!)
#define SHIELD_CS 7 // VS1053 chip select pin (output)
#define SHIELD_DCS 6 // VS1053 Data/command select pin (output)
#define CARDCS 4 // Card chip select pin
#define DREQ 3 // VS1053 Data request, ideally an Interrupt pin

Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);

char myStrings[6][20]; 

File MyFile;

void setup() {
  Serial.begin(9600);
  Serial.println("Test");

  if (! musicPlayer.begin()) { // initialise the music player
    Serial.println(F("Couldn't find VS1053, do you have the right pins defined?"));
    while (1);
  }
  Serial.println(F("VS1053 found"));

  if (!SD.begin(CARDCS)) {
    Serial.println(F("SD failed, or not present"));
    while (1); // don't do anything more
  }

  Serial.println("Caricamento Array");

  MyFile = SD.open("TRACK002.MP3", FILE_READ );
  if (MyFile) {
    strcpy (myStrings[0], MyFile.name());
    Serial.println(myStrings[0]);
    MyFile.close();
  }
  MyFile = SD.open("TRACK001.MP3", FILE_READ );
  if (MyFile) {
    strcpy (myStrings[1], MyFile.name());
    Serial.println(myStrings[1]);
    MyFile.close();
  }
  Serial.println("Stampa Array");
  Serial.println(myStrings[0]);
  Serial.println(myStrings[1]);

}
void loop() {

}

```

---

<div class="post-metadata">

**Author:** ![cotestatnt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cotestatnt/32/238781_2.png) [@cotestatnt](https://forum.arduino.cc/u/cotestatnt)\
**Post date:** [July 12, 2022, 1:14pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/9 "2022-07-12T13:14:58Z")

</div>

> [@goscor58](#):
>
> il contenuto di una  
> directory della scheda SD.

Io per uno scopo del genere ci vedrei meglio una [linked list](https://www.learn-c.org/en/Linked_lists), ma capisco che per un neofita possa essere ancora più complesso rispetto ad un array multidimensionale.

Caricare un centinaio di nomi nella memoria di un ATMega328 è fuori discussione: considerando il formato da 8.3 caratteri (più terminatore di stringa '\0'), per 100 nomi sono un totale di 1300 byte!

Devi per forza di cosa gestirne un po' per volta.

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 1:25pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/10 "2022-07-12T13:25:02Z")

</div>

Ciao cotestatnt,  
grazie per le informazioni.  
Visto il limite di memoria forse potrei caricare nell'array, invece del nome file, la sua posizione nella directory (es file numero 1, 2, 3, ecc..) e poi aprire il file usando questa posizione invece del nome.  
Ma qui sto proprio lavorando di fantasia...  
ciao

---

<div class="post-metadata">

**Author:** ![cotestatnt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cotestatnt/32/238781_2.png) [@cotestatnt](https://forum.arduino.cc/u/cotestatnt)\
**Post date:** [July 12, 2022, 1:27pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/11 "2022-07-12T13:27:24Z")

</div>

Ma l'esigenza di caricare i nomi in un array a cosa è dovuta?  
Nel senso qual è lo scopo per cui è necessario?

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 1:29pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/12 "2022-07-12T13:29:28Z")

</div>

Vorrei realizzare un lettore musicale (ho già la scheda apposita) in cui poter scegliere i brani da eseguire

---

<div class="post-metadata">

**Author:** ![cotestatnt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cotestatnt/32/238781_2.png) [@cotestatnt](https://forum.arduino.cc/u/cotestatnt)\
**Post date:** [July 12, 2022, 1:38pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/13 "2022-07-12T13:38:44Z")

</div>

Secondo me ti converrebbe fin da subito scegliere una MCU che abbia più SRAM a disposizione perché immagino ci vorrai mettere anche un display, pulsanti per la selezione e cose simili!?

Non che la cosa sia impossibile da fare con un Arduino Uno per carità... anzi facendo come ti dicevo prima, ovvero selezionando una manciata di file per volta non è nemmeno cosi complicato in fondo.

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 1:44pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/14 "2022-07-12T13:44:56Z")

</div>

Grazie cotestatnt,  
avrei allora bisogno di una scheda che abbia più SRAM ma anche con la stessa piedinatura di UNO, perchè la scheda audio che ho è una Shield che si colloca sopra a Arduino

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1286411_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [July 12, 2022, 2:08pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/15 "2022-07-12T14:08:53Z")

</div>

Ma nella libreria SD c'è un esempio di "lista dei file"....

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 2:10pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/16 "2022-07-12T14:10:46Z")

</div>

si esatto, "Lista". A me invece serve "memorizzare" la lista, non stamparla

---

<div class="post-metadata">

**Author:** ![Standardoil](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/standardoil/32/1286411_2.png) [@Standardoil](https://forum.arduino.cc/u/Standardoil)\
**Post date:** [July 12, 2022, 2:32pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/17 "2022-07-12T14:32:04Z")

</div>

direi poca fantasia  
anche solo leggere un file\_name per volta come in lista e caricarlo in un array sarebbe quello che vuoi fare tu  
ma si può andare ancora oltre...

quante righe della lista si possono vedere, per volta, sul display?

capisci che se fossero solo una....

ma anche due o tre, richiederebbero al massimo tre elementi stringa, di al massimo 13 caratteri  
avresti memoria a sufficienza

un pochino di fantasia mentre si fanno le cose...

la sola difficoltà sarebbe il "risalire" la lista  
ma con, ancora una volta, l'applicazione di pensiero creativo

io sono convinto che si possa fare tranquillamente su una UNO

a proposito  
se anche usassi una MEGA2560, ha "quasi" la stessa piedinatura della UNO  
MA  
i pin SPI sono spostati, servono solo 4 corti (CORTI) cavetti dupont F-F e si fa

ma passare a una MEGA2560 perché non si ha fantasia....

e con questo mi fermo

---

<div class="post-metadata">

**Author:** ![goscor58](https://avatars.discourse-cdn.com/v4/letter/g/9de0a6/32.png) [@goscor58](https://forum.arduino.cc/u/goscor58)\
**Post date:** [July 12, 2022, 2:38pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/18 "2022-07-12T14:38:09Z")

</div>

Ti ringrazio Standardoil per le tue considerazioni.  
La fantasia aiuta, e la tecnica completa l'opera 🙂  
Credo che resterò con il mio UNO e farò tante belle prove.  
grazie  
ciao

---

<div class="post-metadata">

**Author:** ![Datman](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/datman/32/219519_2.png) [@Datman](https://forum.arduino.cc/u/Datman)\
**Post date:** [July 12, 2022, 2:53pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/19 "2022-07-12T14:53:56Z")

</div>

Con un display a 4 righe, potresti caricare di volta in volta 6 titoli in altrettanti array di caratteri numerati da 0 a 5: i 4 titoli visualizzati, il precedente e il successivo. Ogni volta che scorri giù, arretri di uno gli array copiando da 1 a 0, da 2 a 1, da 3 a 2, da 4 a 3, da 5 a 4 e metti in 5 il titolo nuovo. Come sempre, visualizzi da 1 a 4.

---

<div class="post-metadata">

**Author:** ![cotestatnt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/cotestatnt/32/238781_2.png) [@cotestatnt](https://forum.arduino.cc/u/cotestatnt)\
**Post date:** [July 12, 2022, 2:55pm UTC](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669/20 "2022-07-12T14:55:16Z")

</div>

> [@Standardoil](#):
>
> io sono convinto che si possa fare tranquillamente su una UNO

Concordo, a patto però che legga un po' di file per volta come dicevamo (a spanne più o meno quanti ne riesce a visualizzare sul display).

[Next page](https://forum.arduino.cc/t/problema-con-nome-file-e-array/1011669.md?page=2)
