elm-chan FATFS

Gast #5083832
Ich nutze die SD-Lib von Elm-Chan.
So nun b ich mal eine Frage und zwar habe ich auf der SD-Karte einen
Ordner "DATA" in dem Befinden sich mehrere Unterordner.

Nun wollt ich mittels FRESULT scan_files("DATA") mir die Unterordner in 
"DATA" anzeigen lassen aber alles hängt sich auf.

kann mir jemand weiterhelfen
mfg



1
scan_files("DATA");
2

3

4

5

6

7

8
FRESULT scan_files (
9
    char* path        /* Start node to be scanned (***also used as work area***) */
10
)
11
{
12
    FRESULT res;
13
    DIR dir;
14
    UINT i;
15
    static FILINFO fno;
16

17

18
    res = f_opendir(&dir, path);                       /* Open the directory */
19
    if (res == FR_OK) {
20
        for (;;) {
21
            res = f_readdir(&dir, &fno);                   /* Read a directory item */
22
            if (res != FR_OK || fno.fname[0] == 0) break;  /* Break on error or end of dir */
23
            if (fno.fattrib & AM_DIR) {                    /* It is a directory */
24
                i = strlen(path);
25
                sprintf(&path[i], "/%s", fno.fname);
26
                res = scan_files(path);                    /* Enter the directory */
27
                if (res != FR_OK) break;
28
                path[i] = 0;
29
            } else {                                       /* It is a file. */
30
                printf("%s/%s\n", path, fno.fname);
31
            }
32
        }
33
        f_closedir(&dir)
34
    }
35

36
    return res;
37
}
Gast
Du übergibst einen const char* an die Funktion, aber innerhalb der 
Funktion hängst du mit sprintf an den path was dran. Dafür hat path aber 
keinen Platz mehr. Du solltest einen char buffer[] haben in den du zu 
Beginn der Funktion path reinkopierst.
Gast
pitschu schrieb:
> Du übergibst einen const char* an die Funktion, aber innerhalb der
> Funktion hängst du mit sprintf an den path was dran. Dafür hat path aber
> keinen Platz mehr. Du solltest einen char buffer[] haben in den du zu
> Beginn der Funktion path reinkopierst.

ahhh

Beim ersten Aufruf werden die Ordner korrekt angzeigt und wenn ich die 
Funktion nochmals Aufrufe dann fehlt ein Ordner.
1
char buff[256];
2

3
strcpy(buff, "DATA");
4
             
5
scan_files(buff);
Moderator Persönliche Seite
Julian schrieb:
> aber alles hängt sich auf.

Julian schrieb:
> Beim ersten Aufruf werden die Ordner korrekt angzeigt und wenn ich die
> Funktion nochmals Aufrufe dann fehlt ein Ordner.

Was denn nun? Hängt sich das Programm auf (Endlosschleife) oder fehlt 
nur ein Ordner?

Wenn letzteres, dann meinst Du, dass mit dieser Abfolge...
1
char buff[256];
2
strcpy(buff, "DATA");
3
scan_files(buff);    // erster Aufruf
4
scan_files(buff);    // zweiter Aufruf

... der Fehler reproduzierbar ist?

Der Ordner, der dann fehlt, wo steckt der bei der printf-Ausgabe des 
ersten Aufrufs?

a) am Anfang
b) in der Mitte
c) am Ende

Ist der Ordner, der fehlt, der einzige Unterordner unter /DATA? War er 
bei der Ausgabe der erste oder letzte Ordner, wenn man die sonstigen 
Dateien mal außen vor lässt?

Fragen über Fragen. Bitte genauere Beschreibungen liefern, sonst kommen 
mehr Gegenfragen als Dir lieb ist.
Gast
Frank M. schrieb:

> Was denn nun? Hängt sich das Programm auf (Endlosschleife) oder fehlt
> nur ein Ordner?
>
>
> Fragen über Fragen. Bitte genauere Beschreibungen liefern, sonst kommen
> mehr Gegenfragen als Dir lieb ist.

Funktioniert alles einwandfrei , ich hatte nur ein Fehler in der Ausgabe 
auf dem TFT.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.