FatFs文件系统:f_readdir

网站作者1年前FatFs530

读取目录项。

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_utime

f_utime 函数修改一个文件或目录的时间戳。FRESULT f_utime (        const XCHAR* FileName, /* 文件或目录路径的指针 */        co...

FatFs文件系统:f_tell

获取一个文件的当前读/写指针。DWORD f_tell (        FIL* FileObject /* File object */   );参数:FileObject——指向打开文件对象...

FatFs文件系统:f_mount

在 FatFs 模块上注册/注销一个工作区(文件系统对象)FRESULT f_mount (  BYTE Drive, /* 逻辑驱动器号 */  FATFS* FileSystemObject ...

FatFs文件系统:f_chmod

修改一个文件或目录的属性。FRESULT f_chmod (        const XCHAR* FileName, /* 文件或目录的指针 */        BYTE Attribute,...

FatFs文件系统:f_unlink

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

FatFs文件系统:f_mkdir

创建一个目录。FRESULT f_mkdir (        const XCHAR* DirName /* 目录名的指针 */   );参数:DirName'\0'结尾的字符串指针,该字符串指...

发表评论    

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