typedef struct {
FSIZE_t fsize; / *文件大小* /
WORD fdate; / *最后修改日期* /
WORD ftime; / *最后修改时间* /
BYTE fattrib; / *属性* /
#if FF_USE_LFN
TCHAR altname[FF_SFN_BUF +1]; / *替代对象名称* /
TCHAR fname [FF_LFN_BUF +1]; / *主要对象名称* /
#else
TCHAR fname [12 +1]; / *对象名称* /
#endif
} FILINFO;
http://elm-chan.org/fsw/ff/doc/sfileinfo.html
typedef struct {
FFOBJID obj; / *对象标识符* /
DWORD dptr; / *当前读/写偏移量* /
DWORD clust; / *当前集群* /
LBA_t sect; / *当前扇区* /
BYTE *dir; / *指向win []中当前SFN条目的指针* /
BYTE * fn; / *指向SFN缓冲区的指针(输入/输出){file [8],ext [3],status [1]} * /
#if FF_USE_LFN
DWORD blk_ofs; / *入口块的偏移量(0xFFFFFFFF:Invalid)* /
WCHAR * lfn; / *指向LFN工作缓冲区的指针(输入/输出)* /
#endif
#if FF_USE_FIND
const TCHAR * pat; / *匹配模式的Ponter * /
#endif
} DIR;
http://elm-chan.org/fsw/ff/doc/sdir.html
f_opendir函数打开一个目录。
FRESULT f_opendir(
DIR * dp, / * [OUT]指向目录对象结构的指针* /
const TCHAR *path/ * [IN]目录名* /
);
f_readdir函数读取目录的项目。
FRESULT f_readdir(
DIR * dp, / * [IN]目录对象* /
FILINFO * fno / * [OUT]文件信息结构* /
);
FRESULT f_rewinddir(
DIR * dp, / * [IN]目录对象* /
);
f_findfirst函数在目录中搜索项目。
FRESULT f_findfirst(
DIR * dp, / * [OUT]指向目录对象* /
FILINFO * fno, / * [OUT]指向文件信息结构的指针* /
const TCHAR * path, / * [IN]指向要作为目录名称的指针打开* /
const TCHAR * pattern / * [IN]指向匹配模式字符串的指针* /
);
f_findnext函数搜索下一个匹配的对象
FRESULT f_findnext(
DIR * dp, / * [IN]指向目录对象* /
FILINFO * fno / * [OUT]指向文件信息结构的指针* /
);
/* Search a directory for objects and display it */
void find_image_file (void)
{
FRESULT fr; /* Return value */
DIR dj; /* Directory object */
FILINFO fno; /* File information */
fr = f_findfirst(&dj, &fno, "", "dsc*.jp*"); /* Start to search for photo files */
while (fr == FR_OK && fno.fname[0]) { /* Repeat while an item is found */
printf("%s\n", fno.fname); /* Print the object name */
fr = f_findnext(&dj, &fno); /* Search for next item */
}
f_closedir(&dj);
}
//在某个目录下,查找相同类型的文件
int find_test(void)
{
FRESULT res;
DIR dir2;
FILINFO fno2;
res = f_findfirst(&dir2, &fno2, "0:/MUSIC", "A*.mp3");
while(FR_OK == res && 0 != fno2.fname[0])
{
printf("%s\n",fno2.fname);
fr = f_findnext(&dir2, &fno2);
}
}
DIR dir1;
FILINFO fno1;
char path[256] = {0};
UINT i =0;
FRESULT scan_files (char* path)
{
res = f_opendir(&dir1, path);
if(FR_OK == res)
{
for(;;)
{
res = f_readdir(&dir1, &fno1); //读目录
if(FR_OK != res || 0 == fno1.fname[0]) break; ///* Break on error or end of dir */
if(fno1.fattrib & AM_DIR) //属性为目录
{
i = strlen(path);
if('.' != fno1.fname[0]) //. .. AA2
{
sprintf(&path[i], "/%s", fno1.fname);
res = scan_files(path);
if(FR_OK != res) break;
path[i] = 0;
}
}
else
{
printf("%s %s\n",path, fno1.fname); //0:/AA1/AA2/AA3 df.txt
}
}
//f_closedir(&dir1);
}
return res;
}
int dir_test(void)
{
strcpy(path, "0:/AA1");
res = scan_files(path);
return res;
}