微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于fat文件系统文件扫描函数的问题,求大神解答

关于fat文件系统文件扫描函数的问题,求大神解答

时间:10-02 整理:3721RD 点击:
这个函数是官网上给的例程,请问if (fno.fattrib & AM_DIR) 这句话是什么含义,还有就是我把这段程序移植到板子上之后,一旦调用就出现死循环,这段程序用的是递归调用,我总感觉没有递归的结束条件。求解答
FRESULT scan_files (
    char* path        /* Start node to be scanned (also used as work area) */
)
{
    FRESULT res;
    FILINFO fno;
    DIR dir;
    int i;
    char *fn;   /* This function assumes non-Unicode configuration */
#if _USE_LFN
    static char lfn[_MAX_LFN + 1];   /* Buffer to store the LFN */
    fno.lfname = lfn;
    fno.lfsize = sizeof lfn;
#endif

    res = f_opendir(&dir, path);                       /* Open the directory */
    if (res == FR_OK) {
        i = strlen(path);
        for (;;) {
            res = f_readdir(&dir, &fno);                   /* Read a directory item */
            if (res != FR_OK || fno.fname[0] == 0) break;  /* Break on error or end of dir */
            if (fno.fname[0] == '.') continue;             /* Ignore dot entry */
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            if (fno.fattrib & AM_DIR) {                    /* It is a directory */
                sprintf(&path[i], "/%s", fn);
                res = scan_files(path);
                path[i] = 0;
                if (res != FR_OK) break;
            } else {                                       /* It is a file. */
                printf("%s/%s\n", path, fn);
            }
        }
        f_closedir(&dir)
    }
    return res;
}

还有里面的path[i]代表什么含义,比如说我这样调用该函数scan_files ("0:\music"),这样的话sprintf(&path[i], "/%s", fn);这句话输出的文件是什么。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top