elm-chan FATFS

Gast #5083832
Lesenswert?

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 #5083848
Lesenswert?

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 #5083880
Lesenswert?

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 #5083916
Lesenswert?

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 #5084654
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren