最新版 FatFS f_readdir 详解

最新版 FatFS f_readdir 详解

作者:fly 发布于:2014-3-21 16:31 分类:嵌入式

f_readdir

读取目录项

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)

{

   FRESULT res;

   FILINFO fno;

   DIR dir;

   int i;

   char *fn;

#if _USE_LFN

   static char lfn[_MAX_LFN * (_DF1S ? 2 : 1) + 1];

   fno.lfname = lfn;

   fno.lfsize = sizeof(lfn);

#endif



   res = f_opendir(&dir, path);

   if (res == FR_OK) {

       i = strlen(path);

       for (;;) {

           res = f_readdir(&dir, &fno);

           if (res != FR_OK || fno.fname[0] == 0) break;

           if (fno.fname[0] == '.') continue;

#if _USE_LFN

           fn = *fno.lfname ? fno.lfname : fno.fname;

#else

           fn = fno.fname;

#endif

           if (fno.fattrib & AM_DIR) {

               sprintf(&path[i], "/%s", fn);

               res = scan_files(path);

               if (res != FR_OK) break;

               path[i] = 0;

           } else {

               printf("%s/%s\n", path, fn);

           }

       }

   }


   return res;

}


发表评论:

 
Powered by emlog sitemap