FatFs文件系统:f_readdir

网站作者5个月前FatFs251

读取目录项。

FRESULT f_readdir ( 
    DIR* DirObject, /* 指向打开的目录对象结构的指针 */ 
    FILINFO* FileInfo /* 指向文件信息结构的指针 */
);


参数:

DirObject 打开的目录对象的指针。

FileInfo 存储已读取项的文件信息结构指针。


返回值:

FR_OK (0)函数成功。

FR_DISK_ERR 由于底层磁盘 I/O 函数中的错误,而导致该函数失败。

FR_INT_ERR 由于一个错误的 FAT 结构或一个内部错误,而导致该函数失败。

FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。

FR_INVALID_OBJECT 文件对象无效。


描述:

f_readdir 函数当_FS_MINIMIZE <= 1 时可用。

f_readdir 函数顺序读取目录项。目录中的所有项可以通过重复调用 f_readdir 函数被读取。当所有目录项已被读取并且没有项要读取时,该函数没有任何错误地返回一个空字符串到 f_name[]成员中。当 FileInfo给定一个空指针时,目录对象的读索引将被回绕。当 LFN 功能被使能时,在使用 f_readdir 函数之前,文件信息结构中的 lfname 和 lfsize 必须被初始化为有效数值。lfname 是一个返回长文件名的字符串缓冲区指针。lfsize 是以字符为单位的字符串缓冲区的大小。如果读缓冲区或 LFN 工作缓冲区的大小(对于 LFN)不足,或者对象没有 LFN,则一个空字符串将被返回到LFN 读缓冲区。如果 LFN 包含任何不能被转换为 OEM 代码的字符,则一个空字符串将被返回,但是这不是 Unicode API 配置的情况。当 lfname 是一个空字符串时,没有 LFN 的任何数据被返回。当对象没有 LFN时,任何小型大写字母可以被包含在 SFN 中。

当相对路径功能被使能(_FS_RPATH == 1)时,"."和".."目录项不会被过滤掉,并且它将出现在读目录项中。


示例:

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 is assuming non-Unicode cfg. */
#if _USE_LFN 
    static char lfn[_MAX_LFN + 1]; 
    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); 
                if (res != FR_OK) break; 
                path[i] = 0; 
            } 
            else 
            { /* It is a file. */ 
                printf("%s/%s\n", path, fn); 
            } 
        }
    } 
    return res;
}


相关文章

FatFs文件系统:f_open

创建/打开一个用于访问文件的文件对象。FRESULT f_open (      FIL* FileObject, /* 空白文件对象结构指针 */      const XCHAR* FileN...

FatFs文件系统:f_stat

获取文件状态。FRESULT f_stat (        const XCHAR* FileName, /* 文件名或目录名的指针 */        FILINFO* FileInfo /*...

FatFs文件系统:f_chdrive

f_chdrive 函数改变当前驱动器。FRESULT f_chdrive (        BYTE Drive /* 逻辑驱动器号 */   );参数:Drive 指定将被设置为当前驱动器的逻...

FatFs文件系统:get_fattime

获取当前时间。DWORD get_fattime (void);参数:void返回值:返回的当前时间被打包进一个 DWORD 数值。各位域定义如下: bit31:25 年,从 1980 年开始算起(0...

FatFs文件系统:f_unlink

移除一个对象FRESULT f_unlink (        const XCHAR* FileName /* 对象名的指针 */   );参数:FileName'\0'结尾的字符串指针,该字符...

FatFs文件系统:disk_status

获取当前磁盘的状态DSTATUS disk_status (        BYTE Drive /* 物理驱动器号*/   );参数:Drive 指定待确认的物理驱动器号。 返回值:磁盘状态,是...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。