文件系统目录操作函数

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;    
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值