SD-Verzeichnis als Liste lesen

Hallo, ich habe aus den SD-Beispielen die "CardInfo" in einer eigene Funktion abgelegt:

void SDCard()
{
hier das Zeug´s aus der CardInfo
}

das funktioniert und alle Information werden sauber ausgegeben. Aber hier:

root.openRoot(volume);
// list all files in the card with date and size
root.ls(LS_R | LS_DATE | LS_SIZE);

übersteigt es meinen beschränkten Horizont.

root.ls ist ja ein List-Kommando, d.h. es wird alles in einem Rutsch aufgelistet.

root.ls(LS_R);

holt mir alle- Dateinamen hoch. Aber wie komme ich an den einzelnen? Es gibt zwar "listfiles" in den Beispielen, aber es vernagelt mir mein Setup(), da will ich kein "SD" stehen haben- nur in meiner Funktion.

root ist hier doch schon geöffnet, es muss doch möglich sein- einen Namen oder Datum oder Größe in einer Schleife zu lesen. Z.B. hole mir die ersten 5...

Hole Name 1. File Hole Name 2. File Hole Name 3. File Hole Name 4. File

Wie geht das denn? Kann man die Ausgabe von "root.ls(LS_R)" in seine einzelnen Teile zerlegen? Da muß es doch etwas "einfaches" geben.

Gruß und Dank Andreas

Kann man die Ausgabe von "root.ls(LS_R)" in seine einzelnen Teile zerlegen?

Da musst du dir die Methode void SdFile::ls(uint8_t flags, uint8_t indent) anschauen... ( ...\libraries\SD\src\utility\SdFile.cpp und natürlich SdFat.h ). Sehr lehrreich.

Die Antwort ist "na ja, allerdings..."

Schau mal hier rein (weiter unten).

Gruß Tommy

Hallo,
das was michael_x angerissen hat habe ich mir angeschaut, so konnte ich erkennen
auf was Tommy56 in seinem Link hinweist.
Dort steht “geschrieben” wie es anzuwenden ist.
Man bekommt so ohne gehampel und einfach die SD-Information die man braucht.

//Verzeichnis SD lesen
root.openRoot(volume);
dir_t p;

root.rewind();

while (root.readDir(p) > 0) {

  if (p.name[0] == DIR_NAME_FREE) break;

  if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;

  if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;

  for (uint8_t i = 0; i < 11; i++) 
  {

    if (p.name[i] == ' ') continue;

    if (i == 8) 
    {
      Serial.print('.');
    }  

    Serial.print((char)p.name[i]);     
  }

  Serial.write('\n');// Terminator
}

Serial.print("ENDE");
Serial.println();

Ausgabe:

ORDNER
HANDBUCH.PDF
NEXTIONF.TXT
NEXTIO~1.TXT
OHNE-TIT.TXT
SDGRUùNK.PNG
ASCII-~1.PNG
SERIEL~1.RTF
AMARANTE.TTF
OFL.TXT
DPINST.XML
SLABVCP.INF
SILABSER.SYS
RELEAS~1.TXT
ENDE

Diese Methoden scheinen recht mächtig zu sein.
Schönen Dank dafür.
Gruß und Spaß
Andreas